2016-09-06 11 views
1
迅速

で文字列の末尾に:計算範囲は、私が持っているNSMutatableString

var string: String = "Due in %@ (%@) $%@.\nOverdue! Please pay now %@" 
attributedText = NSMutableAttributedString(string: string, attributes: attributes) 

どのように迅速に単語Overdueから長さと開始インデックスの両方を計算するには?

let startIndex = attributedText.string.rangeOfString("Overdue") 
let range = startIndex..<attributedText.string.finishIndex 

// Access the substring. 
let substring = value[range] 
print(substring) 
をしかし、それは動作しません:

は、これまで私が試してみました。

答えて

3

あなたが最初の結果の文字列を生成する必要があります:

let string = String(format: "Due in %@ (%@) $%@.\nOverdue! Please pay now %@", "some date", "something", "15", "some date") 

そして、インデックス間の距離を取得するために.disTanceToを使用します。

if let range = string.rangeOfString("Overdue") { 
    let start = string.startIndex.distanceTo(range.startIndex) 
    let length = range.startIndex.distanceTo(string.endIndex) 

    let wordToEndRange = NSRange(location: start, length: length) 
    // This is the range you need 

    attributedText.addAttribute(NSForegroundColorAttributeName, 
    value: UIColor.blueColor(), range: wordToEndRange) 
} 

enter image description here


文字列が絵文字やその他のUnicode文字が含まれている場合、上記の溶液は、そのような場合のために正常に動作しないことができるようにNSRangeが正しく動作しませんのでご注意ください。

+0

良い仕事仲間:) –

+1

天才:

同様にそのケースをカバーし、よりよい解決策のためのSO次の答えをご覧ください。色を付け加えて私の問題の2つを解決しました。あまりにも多くの@ozgurありがとう!私は投票を倍増させて欲しい。 – kevinabraham

+0

この文字列インデックスのNSRangeへの変換は、文字列にEmojisやその他のUnicode文字> U + FFFFが含まれていれば*正しく動作しません。同様の問題については、http://stackoverflow.com/questions/27880650/swift-extract-regex-matchesとhttp://stackoverflow.com/questions/27040924/nsrange-from-swift-rangeを比較してください。 - あなたは 'let string =" Bla bla Overdue!bla bla "'と試すことができます –

関連する問題