【问题标题】:Swift 2.0 : 'enumerate' is unavailable: call the 'enumerate()' method on the sequenceSwift 2.0:“枚举”不可用:在序列上调用“枚举()”方法
【发布时间】:2015-06-09 11:11:40
【问题描述】:

刚下载了Xcode 7 Beta,enumerate关键字出现了这个错误。

for (index, string) in enumerate(mySwiftStringArray)
{

}

谁能帮我解决这个问题?

另外,count() 似乎不再适用于计算 String 的长度。

let stringLength = count(myString)

在上面一行,编译器说:

“count”不可用:访问集合的“count”属性。

Apple 是否发布了任何 Swift 2.0 的编程指南?

【问题讨论】:

  • 我还想念一个编程指南。
  • 在 Xcode 7.1.1 中,错误消息非常具有描述性:'enumerate' 不可用:在序列上调用 'enumerate()' 方法

标签: swift swift2


【解决方案1】:

许多全局函数已被协议扩展方法取代, Swift 2 的一个新特性,所以enumerate() 现在是一个扩展方法 对于SequenceType

extension SequenceType {
    func enumerate() -> EnumerateSequence<Self>
}

并用作

let mySwiftStringArray = [ "foo", "bar" ]
for (index, string) in mySwiftStringArray.enumerate() {
   print(string) 
}

String 不再符合SequenceType,你必须 使用characters属性获取Unicode的集合 人物。另外,count() 是一种协议扩展方法 CollectionType 而不是全局函数:

let myString = "foo"
let stringLength = myString.characters.count
print(stringLength)

Swift 3 更新: enumerate() 已重命名为 enumerated()

let mySwiftStringArray = [ "foo", "bar" ]
for (index, string) in mySwiftStringArray.enumerated() {
    print(string)
}

【讨论】:

  • Swift 现在看起来确实是一门不错的语言!
【解决方案2】:

Swift 2 有一个关于使用 enumerate() 的更新。

人们应该使用而不是enumerate(...)

....enumerate()

原因是很多全局函数被协议扩展方法替换了,会报枚举错误。

希望这会有所帮助。 祝一切顺利。 n

【讨论】:

    【解决方案3】:

    我知道这是一个旧线程,但我一直在搞乱 Swift 2.0 和 Playgrounds,我遇到了同样的问题,我想我会分享一个使用字符串的 enumerate() 方法的解决方案

    // This line works in Swift 1.2
    // for (idx, character) in enumerate("A random string, it has a comma.")
    
    // Swift 2.x
    let count = inputString.characters
    
    for (idx, character) in count.enumerate() where character == "," {
    
        // Do something with idx
    }
    

    希望对你有帮助

    谢谢 启

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2015-09-23
      相关资源
      最近更新 更多