我从Swift 2(可能是2.3)迁移到3.0并且很难纠正以下代码: 现在,我知道String不再是一个集合了。如何更正此特定代码?
let separator = anyWord.indexOf("-")!
anyWord.substring(with: (anyWord.indices.suffix(from: anyWord.index(anyWord.startIndex, offsetBy: separator + 1))))
答案 0 :(得分:2)
我对你想要达到的目标略显不确定,但似乎你想要,例如,字符串foo-bar
,用于在给定的分隔符之后构造子字符串,例如bar
已foo-bar
。
你可以用比你试图实现的方法更复杂的方式来实现这一目标。
E.g。
let anyWord = "foo-bar"
if let separator = anyWord.characters.index(of: "-") {
let subStartIndex = anyWord.characters.index(after: separator)
let bar = anyWord[subStartIndex..<anyWord.endIndex]
print(bar) // bar
}
或者,作为另一种选择,使用应用于Collection
(集合)的.characters
split(separator:maxSplits:omittingEmptySubsequences:)
方法:
let anyWord = "foo-bar"
if let chars = anyWord.characters
.split(separator: Character("-"), maxSplits: 1)
.dropFirst(1).last {
let bar = String(chars)
print(bar) // bar
}
或者,作为另一种选择,使用String
的{{3}}方法:
import Foundation
let anyWord = "foo-bar"
let bar = anyWord.components(separatedBy: "-").dropFirst(1).reduce("", +)
print(bar) // bar
答案 1 :(得分:2)
作为对@dfri's first solution的可能改进,您可以使用upperBound
的{{1}} range(of:)
方法(来自String
的桥接) - 其中将在你的字符串中(第一次出现)破折号后给你索引。
NSString
甚至使用import Foundation
let anyWord = "foo-bar"
if let separator = anyWord.range(of: "-")?.upperBound {
let bar = anyWord.substring(from: separator)
print(bar) // bar
}
的{{3}}方法压缩成疯狂的单一绑定:
Optional
虽然注意到“字符串不再是一个集合”问题的一般解决方案,但是使用if let bar = (anyWord.range(of: "-")?.upperBound).map(anyWord.substring(from:)) {
print(bar) // bar
}
代替, 一个string.characters
。