【问题标题】:Cannot subscript a value of type [(String, Int)] with an index of type (String, Int) Swift 2无法使用类型为 (String, Int) Swift 2 的索引来下标 [(String, Int)] 类型的值
【发布时间】:2015-09-06 17:28:20
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: ios arrays swift sorting tuples


    【解决方案1】:

    for i2 in filteredRestraunts {
        justStrings.append(filteredRestraunts[i2].0)
    }
    

    i2 不是索引,而是遍历数组elements,即 它是一个(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 }
      

    【讨论】:

    • 感谢您的帮助。我修复了范围警告,并初始化(并立即清空)数组,现在应用程序可以工作了。我以前见过 map 和 filter 函数的使用,但仍然不知道它们是如何工作的(甚至不知道如何使用它们。)再次感谢您的帮助,我整个星期都遇到了这个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多