如何在此 for 循环中修复'无法将'String'类型的值转换为预期的参数类型'Int'
Posted
技术标签:
【中文标题】如何在此 for 循环中修复\'无法将\'String\'类型的值转换为预期的参数类型\'Int\'【英文标题】:How can I fix 'Cannot convert value of type 'String' to expected argument type 'Int' in this for loop如何在此 for 循环中修复'无法将'String'类型的值转换为预期的参数类型'Int' 【发布时间】:2016-09-17 22:14:54 【问题描述】:经过数小时试图找到答案,我被官方难住了。
我有一个字符串数组:
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)'。
解决方法对非初学者来说一定很明显,但对我来说并不明显。
提前致谢。
【问题讨论】:
仅供参考。您的refresh()
不是更新单元格的方法。您需要实现 UITableViewDataSource 所需的方法。见developer.apple.com/library/ios/documentation/UIKit/Reference/…
嗨,Daniel,我正在编写有关附件视图的教程,该教程实现了此刷新方法,以确保在用户选择不同的行时使用复选标记更新行。我在帖子中删除了那部分代码以简化我的示例。我也在实现创建 tableView 单元格所需的三种方法。不过感谢您的评论。
【参考方案1】:
它不起作用,因为您传递的是字符串,而不是字符串的索引。试试看
for (index, artist) in artists.enumerate()
然后传入索引。
【讨论】:
我喜欢这种语法。这是for in
循环与 for
在一系列索引上循环的功能的便利。【参考方案2】:
初学者的解决方法很简单:
for artist in artists.enumerate()
let indexPath = NSIndexPath(forItem: artist.index, inSection: 0)
if let cell = tableView.cellForRowAtIndexPath(indexPath)
cell.textLabel?.text = artist.element
问题在于,您试图将“艺术家”String
传递给 NSIndexPath(forItem: Int, inSection: Int)
初始化程序的 forItem
参数。如您所见,它需要 2 个Int
参数。所以@Ahaubster 的答案是正确的,你只是错过了他的最后一句话。
【讨论】:
对不起,我在那里犯了一个小错误。现在应该编译。 你仍然错过了element
,但我已修复它。以上是关于如何在此 for 循环中修复'无法将'String'类型的值转换为预期的参数类型'Int'的主要内容,如果未能解决你的问题,请参考以下文章
OpenMP 不在不同的线程中运行这个 for 循环,我该如何修复它
java将list集合中的for数据循环添加到String数组中