Swift 4 Güncellemesi
Swift 4'te yine String
uyuyor Collection
, bu nedenle dizelerin başlangıç ve sonlarını kullanmak dropFirst
ve dropLast
kırpmak mümkün . Sonuç türdendir Substring
, bu nedenle String
a'yı geri almak için bunu kurucuya iletmeniz gerekir String
:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()
ve dropLast()
ayrıca Int
bırakılacak karakter sayısını belirtmek için bir alın :
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
Dizede olandan daha fazla düşürülecek karakter belirtirseniz, sonuç boş dize ( ""
) olur.
let result5 = String(str.dropFirst(10)) // ""
Swift 3 güncellemesi
Yalnızca ilk karakteri kaldırmak ve orijinal dizeyi yerinde değiştirmek istiyorsanız, @ MickMacCallum'un cevabına bakın. İşlemde yeni bir dize oluşturmak istiyorsanız, kullanın substring(from:)
. Bir uzantısı ile karşı String
, sen çirkinliğini gizleyebilirsiniz substring(from:)
ve substring(to:)
başlangıç ve bir kenarlarından kırpmak için yararlı eklemeler oluşturmak için String
:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return substring(from: index(startIndex, offsetBy: count))
}
func chopSuffix(_ count: Int = 1) -> String {
return substring(to: index(endIndex, offsetBy: -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Onlar gibi dropFirst
ve dropLast
onlardan önce, Dizede yeterli sayıda harf yoksa bu işlevler çökecektir. Bunları doğru kullanma sorumluluğu arayanın üzerindedir. Bu geçerli bir tasarım kararıdır. Biri, isteğe bağlı olarak döndürmek için bunları yazabilir ve daha sonra arayan tarafından açılmaması gerekir.
Swift 2.x
İçinde Eyvah Swift 2 , dropFirst
ve dropLast
(önceki en iyi çözüm), önceden olduğu gibi uygun değildir. Bir uzantısı ile karşı String
, sen çirkinliğini gizleyebilir substringFromIndex
ve substringToIndex
:
extension String {
func chopPrefix(count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Onlar gibi dropFirst
ve dropLast
onlardan önce, Dizede yeterli sayıda harf yoksa bu işlevler çökecektir. Bunları doğru kullanma sorumluluğu arayanın üzerindedir. Bu geçerli bir tasarım kararıdır. Biri, isteğe bağlı olarak döndürmek için bunları yazabilir ve daha sonra arayan tarafından açılmaması gerekir.
In Swift 1.2 , aramak gerekir chopPrefix
böyle:
"hello".chopPrefix(count: 3) // "lo"
veya _
parametre adını gizlemek için işlev tanımlarına bir alt çizgi ekleyebilirsiniz :
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(_ count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
advance
şeyi önleyebilirsinizdisplay.text!
. Bunun iyi bir çözüm olduğunu söylemiyorum - sadece olası bir yanlış anlamayı düzeltmek. NSString ile, can Int ile içine dizini. - Ve Int ile indeksleyememenizin nedeni Unicode değil; Bunun nedeni, bir Karakterin birden fazla bileşik kod noktasından oluşabilmesidir.