修剪结束string在迅速,在运行时得到错误

我正在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 

使用第二个可以确保结果在string的有效范围内:

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

但更简单的解决scheme是

 let truncatedText = String(answerString.characters.prefix(8)) 

Swift 3 / Xcode 8 beta 6的更新:从Swift 3开始,“collections移动它们的索引”,现在相应的代码

 let to = answerString.index(answerString.startIndex, offsetBy: 8, limitedBy: answerString.endIndex) let truncatedText = answerString.substring(to: to ?? answerString.endIndex) 

更简单的解决scheme

 let truncatedText = String(answerString.characters.prefix(8)) 

仍然有效。