2016-09-16 33 views
2

這種比較曾在斯威夫特2,但不會再在斯威夫特3:如何比較Range <String.Index>和DefaultBidirectionalIndices <String.CharacterView>?

let myStringContainsOnlyOneCharacter = mySting.rangeOfComposedCharacterSequence(at: myString.startIndex) == mySting.characters.indices

如何比較範圍和DefaultBidirectionalIndices?

+0

看一看一個t http://stackoverflow.com/a/39104563/1187415,其中包含Swift 2和Swift 3的'isSingleComposedCharacter'定義。 –

回答

5

SE-0065 – A New Model for Collections and Indices

在斯威夫特2,collection.indices返回了Range<Index>,但由於範圍是一對簡單的索引a nd指數不能再自行提前,Range<Index>不再可迭代。

爲了保持這樣的代碼在上述的工作,Collection已獲取的相關聯的索引類型,始終是可迭代,...

rangeOfComposedCharacterSequence由於回報範圍的 字符索引,溶液是使用indices,但 startIndex..<endIndex

myString.rangeOfComposedCharacterSequence(at: myString.startIndex) 
== myString.startIndex..<myString.endIndex 
1

據我所知,StringString.CharacterView沒有簡明的方法返回Range<String.Index>或類似的東西。

您可能需要顯式地創建一系列帶有一系列操作:

let myStringContainsOnlyOneCharacter = myString.rangeOfComposedCharacterSequence(at: myString.startIndex) 
    == myString.startIndex..<myString.endIndex 

或比較只有上限,你的情況:

let onlyOne = myString.rangeOfComposedCharacterSequence(at: myString.startIndex).upperBound 
    == myString.endIndex 
+0

OOP(再次),沒有看到你的答案... - 你可能想要添加對SE-0065的引用,那麼我可以刪除我的。 –

+0

@MartinR,你的答案有更好的參考。請不要猶豫,發佈一個更好的答案。 – OOPer

相關問題