2017-05-05 29 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