2017-05-05 40 views
1

我正在Swift 3.0中的一個項目中工作,我有一個循環可以給我一個對象的狀態(在數組序列中給出一個布爾值)。我的要求是如果元素狀態爲「真」我想獲得相關的索引路徑,所以使用indexPath我可以從我的原始數組中獲取整個對象。因此,在一個循環內,我怎樣才能得到這個呢?下面是我部分完成的代碼。在評論中我已經說明了我想通過這個indexPath的地方。獲取循環中相關元素的indexPath

func tapFunction(sender: UIButton) { 

     // This gives me the selected indexPath 
     print("ID :",sender.accessibilityIdentifier!) 


     if let rowIndexString = sender.accessibilityIdentifier, let rowIndex = Int(rowIndexString) { 
     self.sateOfNewSongArray[rowIndex] = !self.sateOfNewSongArray[rowIndex] 
     } 
     sender.isSelected = !sender.isSelected 


     for (element) in self.sateOfNewSongArray { 

     //This is where I wants to pass the rowIndex that became true 
      if element == true { 
       selectedSongList.addingObjects(from: [songList[rowIndex]]) 

      } 

     } 
    } 
+0

嘗試更新的答案,並讓我知道,如果您有任何困惑。 – Krunal

+0

我的數組類型是NSArray。所以這不會工作 – danu

+0

不要在Swift中使用NSArray,聲明你的數組,正如我在最後一個示例塊中所示。示例字符串數組:let selectedSongList = [String]()在這裏分享你的數組聲明,我會幫你將數組轉換成Swift數組。 – Krunal

回答

1

注意:請確保您的數組 'sateOfNewSongArray' 有布爾類型的元素

嘗試以下解決方案:

示例代碼1:根據您的問題中的當前代碼。

func tapFunction(sender: UIButton) { 

    // This gives me the selected indexPath 
    print("ID :",sender.accessibilityIdentifier!) 


    if let rowIndexString = sender.accessibilityIdentifier, let rowIndex = Int(rowIndexString) { 
     self.sateOfNewSongArray[rowIndex] = !self.sateOfNewSongArray[rowIndex] 
    } 
    sender.isSelected = !sender.isSelected 


    for (index, element) in self.sateOfNewSongArray.enumerated() { 

    if element { 
     if let songName:String = songList[index] { 
      selectedSongList.append(songName) 
     } 
    } 
    } 

} 

示例代碼2:更多更方便,簡潔。

func tapFunction(sender: UIButton) { 

    // This gives me the selected indexPath 
    print("ID :",sender.accessibilityIdentifier!) 

    if let rowIndexString = sender.accessibilityIdentifier, let rowIndex = Int(rowIndexString) { 
     if let songName:String = songList[rowIndex] { 
      selectedSongList.append(songName) 
     } 

    } 

} 

枚舉()是一個函數,(通過迭代陣列的元件)

這裏是基本樣本代碼返回對與索引和數組的元素列舉的序列,的理解。複製並執行此代碼:

let songList =  [「cat」, 「dog」, 「elephant」] 
let sateOfNewSongArray = [false, true, false] 
let selectedSongList = [String]() 

for (index, element) in self.sateOfNewSongArray.enumerated() { 

     if element { 
     if let animalName:String = songList[index] { 
       selectedSongList.append(animalName) 
     } 
     } 
} 

print(「selectedSongList - \(selectedSongList)」) 
+0

在我的「songList」數組中想象出我有[貓,狗,大象]和我的sateOfNewSongArray給我[fales,true,fales],因此,因爲第二個元素給我「真實」,我的要求是讓「dog」 「songList」數組。你知道我在說什麼嗎? – danu

+0

對不起,我對swift很陌生,請你尊重我的代碼。我的要求是將索引傳遞給songList並獲取相關項目。 – danu