Trim swift 中的字符串结束,运行时出错
Trim end off of string in swift, getting error at runtime
我正在 Swift 中制作一个计算器应用程序,一旦获得我的答案,我想在 UILabel 中显示它。唯一的问题是我想将回答限制为 8 个字符。这是我的代码:
let answerString = "\(answer)"
println(answer)
calculatorDisplay.text = answerString.substringToIndex(advance(answerString.startIndex, 8))
这不会 return 任何编译器错误,但在运行时我得到:
fatal error: can not increment endIndex
我们将不胜感激任何帮助。
有两个不同的advance()
函数:
/// Return the result of advancing `start` by `n` positions. ...
func advance<T : ForwardIndexType>(start: T, n: T.Distance) -> T
/// Return the result of advancing start by `n` positions, or until it
/// equals `end`. ...
func advance<T : ForwardIndexType>(start: T, n: T.Distance, end: T) -> T
使用第二个可以确保结果在字符串的有效范围内:
let truncatedText = answerString.substringToIndex(advance(answerString.startIndex, 8, answerString.endIndex))
更新 Swift 2/Xcode 7:
let truncatedText = answerString.substringToIndex(answerString.startIndex.advancedBy(8, limit: answerString.endIndex))
但更简单的解决方案是
let truncatedText = String(answerString.characters.prefix(8))
Swift 3/Xcode 8 beta 6 的更新: 从 Swift 3 开始,“集合移动
他们的索引”,对应的代码是now
let to = answerString.index(answerString.startIndex,
offsetBy: 8,
limitedBy: answerString.endIndex)
let truncatedText = answerString.substring(to: to ?? answerString.endIndex)
更简单的解决方案
let truncatedText = String(answerString.characters.prefix(8))
仍然有效。
我正在 Swift 中制作一个计算器应用程序,一旦获得我的答案,我想在 UILabel 中显示它。唯一的问题是我想将回答限制为 8 个字符。这是我的代码:
let answerString = "\(answer)"
println(answer)
calculatorDisplay.text = answerString.substringToIndex(advance(answerString.startIndex, 8))
这不会 return 任何编译器错误,但在运行时我得到:
fatal error: can not increment endIndex
我们将不胜感激任何帮助。
有两个不同的advance()
函数:
/// Return the result of advancing `start` by `n` positions. ...
func advance<T : ForwardIndexType>(start: T, n: T.Distance) -> T
/// Return the result of advancing start by `n` positions, or until it
/// equals `end`. ...
func advance<T : ForwardIndexType>(start: T, n: T.Distance, end: T) -> T
使用第二个可以确保结果在字符串的有效范围内:
let truncatedText = answerString.substringToIndex(advance(answerString.startIndex, 8, answerString.endIndex))
更新 Swift 2/Xcode 7:
let truncatedText = answerString.substringToIndex(answerString.startIndex.advancedBy(8, limit: answerString.endIndex))
但更简单的解决方案是
let truncatedText = String(answerString.characters.prefix(8))
Swift 3/Xcode 8 beta 6 的更新: 从 Swift 3 开始,“集合移动 他们的索引”,对应的代码是now
let to = answerString.index(answerString.startIndex,
offsetBy: 8,
limitedBy: answerString.endIndex)
let truncatedText = answerString.substring(to: to ?? answerString.endIndex)
更简单的解决方案
let truncatedText = String(answerString.characters.prefix(8))
仍然有效。