ฉันจะลบอักขระตัวสุดท้ายออกจากตัวแปร String โดยใช้ Swift ได้อย่างไร ไม่พบในเอกสาร
นี่คือตัวอย่างเต็มรูปแบบ:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)ฉันจะลบอักขระตัวสุดท้ายออกจากตัวแปร String โดยใช้ Swift ได้อย่างไร ไม่พบในเอกสาร
นี่คือตัวอย่างเต็มรูปแบบ:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)คำตอบ:
Swift 4.0 (รวมถึง 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)สวิฟท์ 3.0
API ได้รับswiftyอีกเล็กน้อยและเป็นผลให้ส่วนขยายของมูลนิธิเปลี่ยนไปเล็กน้อย:
var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name)      // "Dolphin"
print(truncated) // "Dolphi"หรือรุ่นในสถานที่:
var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name)      // "Dolphi"ขอบคุณ Zmey, Rob Allen!
Swift 2.0+ Way
มีสองสามวิธีที่จะทำให้สิ่งนี้สำเร็จ:
ผ่านส่วนขยายของมูลนิธิแม้ว่าจะไม่ได้เป็นส่วนหนึ่งของห้องสมุด Swift:
var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"โดยใช้removeRange()วิธีการ (ซึ่งaltersname ):
var name: String = "Dolphin"    
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"ใช้dropLast()ฟังก์ชั่น:
var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"String เก่า .Index (Xcode 6 Beta 4 +)
เนื่องจากStringประเภทใน Swift มีจุดมุ่งหมายเพื่อให้การสนับสนุน UTF-8 ที่ยอดเยี่ยมคุณจะไม่สามารถเข้าถึงดัชนี / ช่วง / สตริงย่อยของตัวละครโดยใช้Intประเภท คุณใช้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"อีกทางหนึ่ง (สำหรับตัวอย่างที่ใช้งานได้จริง แต่มีการศึกษาน้อยกว่า) คุณสามารถใช้endIndex:
let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"หมายเหตุ:ฉันพบว่านี่เป็นจุดเริ่มต้นที่ดีสำหรับการทำความเข้าใจString.Index
วิธีเก่า (pre-Beta 4)
คุณสามารถใช้substringToIndex()ฟังก์ชั่นได้โดยให้มันมีความยาวน้อยกว่าString:
let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"substringToIndex
                    substringToIndex substringFromIndexมันไม่ได้ทำให้คุณรู้สึกผิดพลาดอย่างชาญฉลาดให้ฉันบอกคุณ
                    substringToIndexไม่ได้เป็นสมาชิกชื่อ นอกจากนี้ในฐานะของ Xcode 7 สตริงไม่มี.countคุณสมบัติอีกต่อไปตอนนี้มันจะถูกนำไปใช้กับตัวละครเท่านั้น:string.characters.count
                    var truncated = name.substring(to: name.index(before: name.endIndex))
                    dropLast()ฟังก์ชั่นระดับโลกทำงานบนลำดับและดังนั้นจึงอยู่ในสตริง:
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คุณสมบัติบน String จะส่งลำดับดังนั้นตอนนี้คุณต้องใช้:   expression = expression.characters.dropLast()
                    expression = String(expression.characters.dropLast())หากคุณต้องการให้มันกลับมาเป็น String
                    สวิฟท์ 4:
let choppedString = String(theString.dropLast())ใน Swift 2 ให้ทำสิ่งนี้:
let choppedString = String(theString.characters.dropLast())ฉันแนะนำลิงก์นี้เพื่อทำความเข้าใจกับสตริงของ Swift
var str = "bla"
str.removeLast() // returns "a"; str is now "bl"นี่คือฟอร์มส่วนขยายของสตริง:
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 เวอร์ชันก่อนหน้า 1.2:
...
let stringLength = countElements(self)
...การใช้งาน:
var str_1 = "Maxim"
println("output: \(str_1.removeCharsFromEnd(1))") // "Maxi"
println("output: \(str_1.removeCharsFromEnd(3))") // "Ma"
println("output: \(str_1.removeCharsFromEnd(8))") // ""อ้างอิง:
ส่วนขยายเพิ่มฟังก์ชันการทำงานใหม่ให้กับคลาสโครงสร้างหรือประเภทการแจงนับที่มีอยู่ ซึ่งรวมถึงความสามารถในการขยายประเภทที่คุณไม่สามารถเข้าถึงซอร์สโค้ดต้นฉบับ (รู้จักกันในนามแบบจำลองย้อนหลัง) ส่วนขยายคล้ายกับหมวดหมู่ใน Objective-C (ต่างจากหมวด Objective-C ส่วนขยาย Swift ไม่มีชื่อ)
ดูDOCS
ใช้ฟังก์ชั่นremoveAtIndex(i: String.Index) -> Character:
var s = "abc"    
s.removeAtIndex(s.endIndex.predecessor())  // "ab"วิธีที่ง่ายที่สุดในการตัดอักขระตัวสุดท้ายของสตริงคือ:
title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]สวิฟต์ 4
var welcome = "Hello World!"
welcome = String(welcome[..<welcome.index(before:welcome.endIndex)])หรือ
welcome.remove(at: welcome.index(before: welcome.endIndex))หรือ
welcome = String(welcome.dropLast())let str = "abc"
let substr = str.substringToIndex(str.endIndex.predecessor())  // "ab"var str = "Hello, playground"
extension String {
    var stringByDeletingLastCharacter: String {
        return dropLast(self)
    }
}
println(str.stringByDeletingLastCharacter)   // "Hello, playgroun"หมวดหมู่ที่รวดเร็วที่กลายพันธุ์:
extension String {
    mutating func removeCharsFromEnd(removeCount:Int)
    {
        let stringLength = count(self)
        let substringIndex = max(0, stringLength - removeCount)
        self = self.substringToIndex(advance(self.startIndex, substringIndex))
    }
}ใช้:
var myString = "abcd"
myString.removeCharsFromEnd(2)
println(myString) // "ab"คำตอบสั้น ๆ (ใช้ได้ตั้งแต่ 2015-04-16): removeAtIndex(myString.endIndex.predecessor())
ตัวอย่าง:
var howToBeHappy = "Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)
// "Practice compassion, attention and gratitude. And smile!"Meta:
ภาษายังคงวิวัฒนาการอย่างรวดเร็วทำให้ครึ่งชีวิตของ SO ที่ดีขึ้น แต่ก่อนหลายคำตอบสั้น ๆ อันตราย มันเสมอดีที่สุดในการเรียนรู้ภาษาและการอ้างอิงถึงจริงเอกสาร
ด้วยการใช้ชนิดสตริงย่อยใหม่:
var before: String = "Hello world!"
var lastCharIndex: Int = before.endIndex
var after:String = String(before[..<lastCharIndex])
print(after) // Hello worldวิธีที่สั้นกว่า:
var before: String = "Hello world!"
after = String(before[..<before.endIndex])
print(after) // Hello worldใช้ฟังก์ชั่นadvance(startIndex, endIndex):
var str = "45+22"
str = str.substringToIndex(advance(str.startIndex, countElements(str) - 1))อีกวิธีหนึ่งถ้าคุณต้องการที่จะลบหนึ่งหรือมากกว่าหนึ่งตัวละครมากกว่าหนึ่งจากปลาย
var myStr = "Hello World!"
myStr = (myStr as NSString).substringToIndex((myStr as NSString).length-XX)โดยที่XXคือจำนวนอักขระที่คุณต้องการลบ
Swift 3 (ตามเอกสาร ) 20 พฤศจิกายน 2559
let range = expression.index(expression.endIndex, offsetBy: -numberOfCharactersToRemove)..<expression.endIndex
expression.removeSubrange(range)ฉันขอแนะนำให้ใช้ NSString สำหรับสตริงที่คุณต้องการจัดการ จริง ๆ แล้วคิดว่ามันเป็นนักพัฒนาฉันไม่เคยเจอปัญหากับ NSString ที่ Swift String จะแก้ปัญหา ... ฉันเข้าใจรายละเอียดปลีกย่อย แต่ฉันยังไม่ได้มีความต้องการที่แท้จริงสำหรับพวกเขา
var foo = someSwiftString as NSStringหรือ
var foo = "Foo" as NSStringหรือ
var foo: NSString = "blah"และจากนั้นโลกทั้งโลกของการดำเนินงานสตริง NSString ง่าย ๆ จะเปิดให้คุณ
เป็นคำตอบสำหรับคำถาม
// 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()ฟังก์ชั่นเอาองค์ประกอบสุดท้ายของสตริง
var expression = "45+22"
expression = expression.dropLast()Swift 3 : เมื่อคุณต้องการลบสตริงต่อท้าย:
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
    }
}สวิฟท์ 4.2
ฉันยังลบตัวละครตัวสุดท้ายของฉันออกจาก String (เช่นข้อความ UILabel ) ในแอป IOS
@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รหัสด้านบนฟรีฉันต้องการลบจุดเริ่มต้นของสตริงและไม่สามารถหาการอ้างอิงได้ทุกที่ นี่คือวิธีที่ฉันทำ:
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ภายนอกข้อมูลรถนี้ 17 ตัวอักษรจากจุดเริ่มต้นของสตริง (เขาความยาวสตริงทั้งหมดคือ 67 เราล่วงหน้า -50 จากท้ายและคุณมีมัน