如何在此for循环中修复'无法将类型'String'的值转换为预期的参数类型'Int'

时间:2016-05-20 15:21:40

标签: arrays swift for-loop

经过几个小时的努力寻找答案,我才被正式难倒。

我有一个字符串数组:

let artists = ["Robben Ford", "Joe Bonamassa", "Eric Clapton", "Matt Schofield"]

现在我想迭代这个数组:

func refresh() {
    for artist in artists {
       let indexPath = NSIndexPath(forItem: artist, inSection: 0) <---- Error
       if let cell = tableView.cellForRowAtIndexPath(indexPath) {
          cell.textLabel?.text = artist
      }
}

Xcode在let indexPath语句中抱怨,'无法将类型'String'的值转换为期望的参数类型'Int'。我知道它希望forItem是一个Int,但我无法弄清楚如何使它成为一个。

我确实尝试将for循环更改为

for artist in artists.enumerate() {
     }

然后它只是说它不能隐蔽'(index:Int,element:String)'。

对于非初学者来说,修复必须是显而易见的,但这对我来说并不明显。

提前致谢。

2 个答案:

答案 0 :(得分:3)

它不起作用,因为您传入的是字符串,而不是字符串的索引。试试

for (index, artist) in artists.enumerate()

然后传入索引。

答案 1 :(得分:0)

初学者的修复只是:

for artist in artists.enumerate() {
    let indexPath = NSIndexPath(forItem: artist.index, inSection: 0)
    if let cell = tableView.cellForRowAtIndexPath(indexPath) {
        cell.textLabel?.text = artist.element
    }
}

问题在于,您正试图通过一位&#34;艺术家&#34; String forItem初始化程序的NSIndexPath(forItem: Int, inSection: Int)参数Int。如您所见,它需要2 setInterval(move, 1000); var left=0; function move() { $("div").css("left", left); left=left+20; } 个参数。所以@Ahaubster的回答是正确的,你只是错过了他的最后一句话。