Swift kullanarak String değişkeninden son karakteri nasıl kaldırabilirim? Belgelerde bulunamıyor.
İşte tam örnek:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
Swift kullanarak String değişkeninden son karakteri nasıl kaldırabilirim? Belgelerde bulunamıyor.
İşte tam örnek:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
Yanıtlar:
Swift 4.0 (ayrıca Swift 5.0)
var str = "Hello, World" // "Hello, World"
str.dropLast() // "Hello, Worl" (non-modifying)
str // "Hello, World"
String(str.dropLast()) // "Hello, Worl"
str.remove(at: str.index(before: str.endIndex)) // "d"
str // "Hello, Worl" (modifying)
Swift 3.0
API'lar biraz daha değişti ve bunun sonucunda Foundation uzantısı biraz değişti:
var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Veya yerinde sürüm:
var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name) // "Dolphi"
Teşekkürler Zmey, Rob Allen!
Swift 2.0+ Yolu
Bunu başarmanın birkaç yolu vardır:
Swift kütüphanesinin bir parçası olmamasına rağmen Foundation uzantısı aracılığıyla:
var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Kullanarak removeRange()
(ki burada yöntem değiştirirname
):
var name: String = "Dolphin"
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"
dropLast()
Fonksiyonunu kullanarak :
var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
Eski String Index (Xcode 6 Beta 4 +) Yolu
Yana String
Swift tipleri mükemmel UTF-8 desteği sağlamak amacı, artık erişim karakter indeksleri / aralıkları / altdizgelerin kullanarak yapabilirsiniz Int
türlerini. Bunun yerine şunları kullanırsınız String.Index
:
let name: String = "Dolphin"
let stringLength = count(name) // Since swift1.2 `countElements` became `count`
let substringIndex = stringLength - 1
name.substringToIndex(advance(name.startIndex, substringIndex)) // "Dolphi"
Alternatif olarak (daha pratik, ancak daha az eğitici bir örnek için) şunları kullanabilirsiniz endIndex
:
let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"
Not: Bulduğum bu anlayış için harika bir başlangıç noktası olarakString.Index
Eski (Beta 4 öncesi) Yol
substringToIndex()
Fonksiyonu, uzunluğundan daha kısa bir süre sağlayarak kullanabilirsiniz String
:
let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"
substringToIndex
substringToIndex
olmadığından emin olun substringFromIndex
. Bunu yanlış bir şekilde zavallı hissetmenize neden olmaz, size söyleyeyim.
substringToIndex
. Ayrıca, Xcode 7'den itibaren dize artık bir .count
özelliğe sahip değil, artık sadece karakterlere uygulanıyor:string.characters.count
var truncated = name.substring(to: name.index(before: name.endIndex))
Küresel dropLast()
işlev diziler ve dolayısıyla Dizeler üzerinde çalışır:
var expression = "45+22"
expression = dropLast(expression) // "45+2"
// in Swift 2.0 (according to cromanelli's comment below)
expression = String(expression.characters.dropLast())
characters
bir String üzerindeki özellik bir dizi verir, bu nedenle şimdi şunları kullanmalısınız: expression = expression.characters.dropLast()
expression = String(expression.characters.dropLast())
bir dize olarak geri isterseniz düzgün sonuç vermek zorunda
Bu bir String Uzantısı Formudur:
extension String {
func removeCharsFromEnd(count_:Int) -> String {
let stringLength = count(self)
let substringIndex = (stringLength < count_) ? 0 : stringLength - count_
return self.substringToIndex(advance(self.startIndex, substringIndex))
}
}
Swift'in 1.2'den önceki sürümleri için:
...
let stringLength = countElements(self)
...
Kullanımı:
var str_1 = "Maxim"
println("output: \(str_1.removeCharsFromEnd(1))") // "Maxi"
println("output: \(str_1.removeCharsFromEnd(3))") // "Ma"
println("output: \(str_1.removeCharsFromEnd(8))") // ""
Referans:
Uzantılar, varolan bir sınıfa, yapıya veya numaralandırma türüne yeni işlevler ekler. Bu, orijinal kaynak koduna (geriye dönük modelleme olarak bilinir) erişiminiz olmayan türleri genişletme özelliğini de içerir. Uzantılar Objective-C'deki kategorilere benzer. (Objective-C kategorilerinden farklı olarak, Swift uzantılarının adları yoktur.)
Bkz. DOCS
İşlevi kullanın removeAtIndex(i: String.Index) -> Character
:
var s = "abc"
s.removeAtIndex(s.endIndex.predecessor()) // "ab"
Dizenin son karakterini kırpmanın en kolay yolu:
title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]
Hızlı 4
var welcome = "Hello World!"
welcome = String(welcome[..<welcome.index(before:welcome.endIndex)])
veya
welcome.remove(at: welcome.index(before: welcome.endIndex))
veya
welcome = String(welcome.dropLast())
var str = "Hello, playground"
extension String {
var stringByDeletingLastCharacter: String {
return dropLast(self)
}
}
println(str.stringByDeletingLastCharacter) // "Hello, playgroun"
Değişen hızlı bir kategori:
extension String {
mutating func removeCharsFromEnd(removeCount:Int)
{
let stringLength = count(self)
let substringIndex = max(0, stringLength - removeCount)
self = self.substringToIndex(advance(self.startIndex, substringIndex))
}
}
kullanın:
var myString = "abcd"
myString.removeCharsFromEnd(2)
println(myString) // "ab"
Kısa cevap (2015-04-16 tarihinden itibaren geçerlidir): removeAtIndex(myString.endIndex.predecessor())
Misal:
var howToBeHappy = "Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)
// "Practice compassion, attention and gratitude. And smile!"
Meta:
Dil, hızlı evrimine devam eder ve eski iyi SO cevaplarının yarı ömrünü tehlikeli bir şekilde kısaltır. Dili öğrenmek ve gerçek belgelere başvurmak her zaman en iyisidir .
Yeni Alt dize tipi kullanımı ile:
var before: String = "Hello world!"
var lastCharIndex: Int = before.endIndex
var after:String = String(before[..<lastCharIndex])
print(after) // Hello world
Daha kısa yol:
var before: String = "Hello world!"
after = String(before[..<before.endIndex])
print(after) // Hello world
Swift 3 ( dokümanlara göre ) 20 Kasım 2016
let range = expression.index(expression.endIndex, offsetBy: -numberOfCharactersToRemove)..<expression.endIndex
expression.removeSubrange(range)
Değiştirmek istediğiniz dizeler için NSString kullanmanızı öneririm. Aslında bunu bir geliştirici olarak düşünmeye geldim, Swift String'in çözeceği NSString ile hiç bir sorunla karşılaşmadım ... incelikleri anlıyorum. Ama henüz onlara gerçekten ihtiyacım yok.
var foo = someSwiftString as NSString
veya
var foo = "Foo" as NSString
veya
var foo: NSString = "blah"
Ve sonra basit NSString string işlemlerinin tüm dünyası size açık.
Sorunun cevabı olarak
// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)
dropLast()
İşlev dizesi son öğe kaldırır.
var expression = "45+22"
expression = expression.dropLast()
Swift 3 : Sondaki dizeyi kaldırmak istediğinizde:
func replaceSuffix(_ suffix: String, replacement: String) -> String {
if hasSuffix(suffix) {
let sufsize = suffix.count < count ? -suffix.count : 0
let toIndex = index(endIndex, offsetBy: sufsize)
return substring(to: toIndex) + replacement
}
else
{
return self
}
}
Hızlı 4.2
Ayrıca son karakterimi IOS uygulamasında String'den (yani UILabel metni ) siliyorum
@IBOutlet weak var labelText: UILabel! // Do Connection with UILabel
@IBAction func whenXButtonPress(_ sender: UIButton) { // Do Connection With X Button
labelText.text = String((labelText.text?.dropLast())!) // Delete the last caracter and assign it
}
import UIKit
var str1 = "Hello, playground"
str1.removeLast()
print(str1)
var str2 = "Hello, playground"
str2.removeLast(3)
print(str2)
var str3 = "Hello, playground"
str3.removeFirst(2)
print(str3)
Output:-
Hello, playgroun
Hello, playgro
llo, playground
Yukarıdaki kod ücretsiz ben dize başlangıcı kaldırmak istedim ve hiçbir yerde bir referans bulamadık. İşte nasıl yaptım:
var mac = peripheral.identifier.description
let range = mac.startIndex..<mac.endIndex.advancedBy(-50)
mac.removeRange(range) // trim 17 characters from the beginning
let txPower = peripheral.advertisements.txPower?.description
Bu, dizenin başlangıcından itibaren 17 karakteri düzeltir (toplam dize uzunluğu 67'dir, sondan -50 ilerleriz ve orada vardır.