无法使用索引类型(String,Int)下标类型[(String,Int)]的值Swift 2

时间:2015-09-06 17:28:20

标签: ios arrays swift sorting tuples

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

提前致谢。

1 个答案:

答案 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是一个范围是的新变量 限于循环。

  • 变量filteredRestrauntsjustStrings 未初始化,因此这会导致其他编译器错误。

  • 两个循环都可以用更实用的方法替换 filtermap

    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 }