Swift 4 Güncellemesi
Swift 4'te yine Stringuyuyor Collection, bu nedenle dizelerin başlangıç ve sonlarını kullanmak dropFirstve dropLastkırpmak mümkün . Sonuç türdendir Substring, bu nedenle Stringa'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 Intbı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 dropFirstve dropLastonlardan ö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 , dropFirstve dropLast(önceki en iyi çözüm), önceden olduğu gibi uygun değildir. Bir uzantısı ile karşı String, sen çirkinliğini gizleyebilir substringFromIndexve 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 dropFirstve dropLastonlardan ö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 chopPrefixbö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.