2016-09-06 9 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를 사용합니다;


enter image description here

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) 
} 
문자열이 그림 이모티콘 또는 다른 유니 코드 문자가 포함 된 경우 위의 솔루션이 경우 제대로 작동하지 않을 수 있도록 NSRange이 제대로 작동하지 않습니다 마십시오.

뿐만 아니라 그 사건을 다루 더 나은 솔루션에 대한 SO 다음과 같은 답변 제발 봐 :

+0

좋은 직장 형제 : –

+1

천재. 색상을 추가하여 내 문제 2 개를 해결했습니다. 너무 많은 @ozgur 감사합니다! 투표를 두 번 할 수 있으면 좋겠다. – kevinabraham

+0

이 문자열 인덱스를 NSRange로 변환하면 문자열에 Emojis 또는 다른 유니 코드 문자> 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"'로 시도해 볼 수 있습니다. –