在swift中修剪字符串的末尾,在运行时出错



我正在Swift中制作一个计算器应用程序,一旦获得答案,我想将其显示在UILabel中。唯一的问题是我想限制所说的答案为8个字符。这是我的代码:

let answerString = "(answer)"
    println(answer)
    calculatorDisplay.text = answerString.substringToIndex(advance(answerString.startIndex, 8))

这不会返回任何编译器错误,但在运行时我得到:

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开始,"收藏移动他们的索引",相应的代码现在是

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))

仍然有效。

最新更新