【问题标题】:Get the indexPath of the relevant element in a loop循环获取相关元素的indexPath
【发布时间】:2017-10-03 17:16:27
【问题描述】:

我在 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]])

            }

        }
    }

【问题讨论】:

  • 尝试更新答案,如果您有任何困惑,请告诉我。
  • 我的数组类型是 NSArray。所以这行不通
  • 不要在 Swift 中使用 NSArray,声明你的数组,就像我在上一个示例块中展示的那样。示例字符串数组: let selectedSongList = [String]() 在此处分享您的数组声明,我会帮助您将数组转换为 Swift 数组。

标签: ios arrays swift xcode indexpath


【解决方案1】:

注意:确保您的数组 'sateOfNewSongArray' 具有 boolean 类型 元素数

尝试以下解决方案:

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

【讨论】:

  • 想象在我的“songList”数组中我有 [cat,dog,elephant] 并且在我的 sateOfNewSongArray 中给我 [fales,true,fales],因此由于第二个元素给了我“真实”我的要求是从“songList”数组中获取“dog”。你明白我在说什么吗?
  • 对不起,我对 swift 很陌生,请您尊重我上面的代码。我的要求是将索引传递给 songList 并获取相关项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多