와 이상한 결과를 반환 내가 태국어를 말하지 않기 때문에 - 감각적 인 테스트.NSString.rangeOfString 내가 예를 들어, 문자열에서 두 단어의 범위를 얻을 필요가 비 라틴 문자
//Find all the ranges of each word
var words: [String] = []
var ranges: [NSRange] = []
//Convert to nsstring first because otherwise you get stuck with Ranges and Strings.
let nstext = backgroundTextField.stringValue as NSString //contains "ยัฟิแก ไฟหก"
words = nstext.componentsSeparatedByString(" ")
var nstextLessWordsWeHaveRangesFor = nstext //if you have two identical words this prevents just getting the first word's range
for word in words
{
let range:NSRange = nstextLessWordsWeHaveRangesFor.rangeOfString(word)
Swift.print(range)
ranges.append(range)
//create a string the same length as word
var fillerString:String = ""
for i in 0..<word.characters.count{
//for var i=0;i<word.characters.count;i += 1{
Swift.print("i: \(i)")
fillerString = fillerString.stringByAppendingString(" ")
}
//remove duplicate words/letters so that we get correct range each time.
if range.length <= nstextLessWordsWeHaveRangesFor.length
{
nstextLessWordsWeHaveRangesFor = nstextLessWordsWeHaveRangesFor.stringByReplacingCharactersInRange(range, withString: fillerString)
}
}
출력 : 그 범위가 겹치는
(0,6)
(5,4)
.
범위가 일치하지 않아 NSLayoutManager.enumerateEnclosingRectsForGlyphRange
을 사용하려고하는 문제가 발생합니다.
정확한 범위 (또는 특정 경우 넌 - 중복 범위)를 얻으려면 어떻게해야합니까?
으로 단순화 될 수 있습니다. 코드에는 print 문이 하나만 있습니다. 두 개의 출력 행을 얻으려면 어떻게해야합니까? –
사실상 의사 코드인데 문제를 격리하려고합니다. 응용 프로그램에서 문자열의 단어를 순환합니다. – glenstorey
문제를 보여주는 재현성 있고 독립적 인 예가 도움이 될 것입니다. 그것에 –