文字列のstartIndexと別のインデックスの間の距離を取得しようとしますが、最初のループ反復で次のエラーが発生します。コードは実際にはほとんどの文字列で動作しますが、一部ではクラッシュします。String.anotherIndexは "致命的なエラーを引き起こします:endIndexをインクリメントできません"
fatal error: cannot increment endIndex
let content = NSMutableAttributedString(string: rawContent, attributes: attrs)
var startIndex = content.string.characters.startIndex
while true {
let searchRange = startIndex..<rawContent.characters.endIndex
if let range = rawContent.rangeOfString("\n", range: searchRange) {
let index = rawContent.characters.startIndex.distanceTo(range.startIndex)
startIndex = range.startIndex.advancedBy(1)
rawContent.replaceRange(range, with: "*")
content.addAttribute(
NSForegroundColorAttributeName,
value: UIColor.redColor(),
range: NSMakeRange(index, 1))
}
else {
break
}
}
content.replaceCharactersInRange(NSMakeRange(0, content.length), withString: rawContent)
content
NSMutableAttributedString
で、アプリの変数は以下の値を持ってクラッシュしたとき:
range.startIndex: 164
content.string.characters.startIndex: 0
content.string.characters.endIndex: 437,
content.string.characters.count: 435
エラーメッセージは、私がしようとしているときendIndexのを増やすことについて述べている理由を私は理解していませんstartIndexからの距離を計算し、anotherIndex
は文字列の長さよりも小さい。
これらの4行のコードからエラーが発生していますか? – Putz1103
デバッガは最後の行で停止します。 – Tapani
質問にすべての行を追加しました。デバッガは、最初のループの反復でlet let index = ...という行で停止します。これまでコードは正常に動作していましたが、一部の文字列ではクラッシュすることはありませんでした。文字列には、改行を含む通常のテキストが含まれています。 – Tapani