我正在学习iOS开发,并且最近在尝试操作元组数组时遇到了一个问题。
我收到以下错误消息:
不能下标类型' [(String,Int)]'索引类型为'(String,Int)'
生成它的代码如下:
justStrings.append(filteredRestraunts[i2].0)
作为一个整体的功能是:
func filterBySliderValue () -> [String] {
var filteredRestraunts: [(String, Int)]
for var i = 0; i < restraunts.count; i++ {
if restraunts[i].1 > Int(starSlider.value) {
filteredRestraunts.append(restraunts[i])
}
else {filteredRestraunts.append(("", 1))}
}
var justStrings: [String]
var i2 = 0
for i2 in filteredRestraunts {
justStrings.append(filteredRestraunts[i2].0)
}
return justStrings
}
这是阵列限制:
var restraunts: [(String, Int)] = [("Dallas BBQ", 3), ("Chicken Express", 4), ("Starbucks", 5)]
提前致谢。
答案 0 :(得分:4)
在
for i2 in filteredRestraunts {
justStrings.append(filteredRestraunts[i2].0)
}
i2
不是索引,而是迭代数组元素,即
它是(String, Int)
元组。您可能想要的是
for i2 in filteredRestraunts {
justStrings.append(i2.0)
}
补充说明:
变量
var i2 = 0
根本没有使用,for循环中的i2
是一个范围是的新变量
限于循环。
变量filteredRestraunts
和justStrings
未初始化,因此这会导致其他编译器错误。
两个循环都可以用更实用的方法替换
filter
和map
:
let filteredRestraunts = restraunts.filter { $0.1 > Int(starSlider.value) }
let justStrings = filteredRestraunts.map { $0.0 }
当然可以合并到
let justStrings = restraunts.filter { $0.1 > Int(starSlider.value) }.map { $0.0 }