循环获取相关元素的indexPath

Get the indexPath of the relevant element in a loop

我在 Swift 3.0 的一个项目中工作,我有一个循环可以给我一个对象的状态(在数组序列中给出一个布尔值)。我的要求是如果元素状态是 "true" 我想得到它的相关索引路径,所以使用 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]])

            }

        }
    }

Note: Make sure your array 'sateOfNewSongArray' has boolean types of elements

尝试以下解决方案:

示例代码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)
       }

   }

}

enumerated() 是一个函数,returns 用索引和数组元素枚举的对序列(通过迭代数组元素)

这是基本的示例代码,供您理解。复制并执行此代码:

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)”)