3

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

            }

        }
    }
4

1 回答 1

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

   }

}

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

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

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)”)
于 2017-05-05T09:33:41.637 回答