Sadece geriye doğru erişiyorum
En iyi yolu kullanmak etmektir substringToIndex
birleştirilerek endIndex
mülkiyet ve advance
küresel işlevi.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Arkadan başlayan bir ip aranıyor
Kullanım rangeOfString
ve set options
için.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Uzantı yok, saf deyimsel Swift
Swift 2.0
advance
artık bir parçası Index
ve deniyor advancedBy
. Bunu şöyle yaparsın:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
Sen diyemezsin advancedBy
bir üzerinde String
değişken boyut öğesi vardır çünkü. Kullanmalısın index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Birçok şeyin adı değiştirildi. Davalar camelCase'de yazılır startIndex
oldu lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Ayrıca, zorla sarmayı önermem index2
. İsteğe bağlı ciltleme veya kullanabilirsiniz map
. Şahsen map
şunları kullanmayı tercih ederim :
var substring3 = index2.map(string2.substring(to:))
Swift 4
Swift 3 sürümü hala geçerlidir ancak artık dizin aralıkları olan abonelikleri kullanabilirsiniz:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
İkinci yaklaşım değişmeden kalır:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))