【发布时间】:2016-07-23 19:53:23
【问题描述】:
我正在将代码从 Swift 2 升级到 Swift 3 并遇到此错误:
wordcount.swift:7:5: 错误:'String' 类型的值没有成员 'enumerateSubstringsInRange' line.enumerateSubstringsInRange(range, options: .ByWords) {w,,,_ in
在 Swift 2 中,此方法来自编译器知道的 String 扩展。
我无法在 Swift 3 库中找到此方法。它出现在Foundation 的文档中:
我的整个脚本是:
import Foundation
var counts = [String: Int]()
while let line = readLine()?.lowercased() {
let range = line.characters.indices
line.enumerateSubstringsInRange(range, options: .ByWords) {w,_,_,_ in
guard let word = w else {return}
counts[word] = (counts[word] ?? 0) + 1
}
}
for (word, count) in (counts.sorted {$0.0 < $1.0}) {
print("\(word) \(count)")
}
它适用于 Swift 2.2(以我已经为 Swift 3 所做的更改为模,例如 lowercase -> lowercased 和 sort -> sorted)但无法使用 Swift 3 编译。
而且非常奇怪的是,Swift 3 命令行编译器和 XCode 8 Beta 中的 Swift 迁移助手都没有建议替换,就像许多其他重命名的方法一样。也许enumerateSubstringsInRange 已被弃用或它的参数名称已更改?
【问题讨论】:
-
改成
enumerateSubstrings(in: range, options: .ByWords) {}
标签: ios swift string foundation