2013-03-01 144 views
1

我不明白爲什麼在下面的代碼中,將打印的擴展範圍是 「location:1,length:1」。爲什麼範圍長度從0延伸到1?rangeOfComposedCharacterSequencesForRange將0字符範圍轉換爲1個字符範圍

NSString * text = @"abc"; 
NSRange range = NSMakeRange(1, 0); 
NSRange extendedRange = [text rangeOfComposedCharacterSequencesForRange:range]; 
NSLog(@"extended range: location %d, length : %d ",extendedRange.location,extendedRange.length); 

的文檔說,這樣做的結果是:

在包括組合字符在範圍 序列的接收器的範圍內。

與下面的討論

This method provides a convenient way to grow a range to include all composed character sequences it overlaps. 

但文字@「ABC」不含任何組合字符,這讓我覺得結果應該是相同的範圍內,修改,無論如何,我會認爲長度爲0的範圍不會與任何字符重疊。

這看起來像一個錯誤,但我可能錯過了一些東西。這是正常的嗎?

回答

1

這可能是一個錯誤。

rangeOfComposedCharacterSequencesForRange:的執行只調用rangeOfComposedCharacterSequenceAtIndex:兩次,範圍的開始和結束索引並返回組合範圍。

該文檔沒有明確指出在提供的範圍邊緣的字符從不包含,但我同意觀察到的行爲感覺不對。

您應該file a bug

0

rangeOfComposedCharacterSequencesForRange:documentation

返回值

在包括在範圍中的組合字符序列中的接收器的範圍內。

討論

此方法提供了一種方便的方式以生長範圍,包括其重疊所有組成的字符序列。

location是有效的,它正在考慮的範圍重疊人物在這個location

+0

要鏈接到的文檔不是rangeOfComposedCharacterSequencesForRange中的一個。你認爲這是相互聯繫的嗎? – madewulf 2013-03-01 11:07:48

+0

鏈接適用於我,所有的方式,如果你去NSString的文檔,然後搜索'rangeOfComposedCharacterSequencesForRange:'你會發現它,你也可以從組織者 – tkanzakic 2013-03-01 11:15:11

+1

做到這一點我看不到一個長度範圍0可以重疊任何東西。它對我來說聽起來像是一個bug。 – madewulf 2013-03-01 11:32:19