อัปเดตสำหรับ Swift 4
ใน Swift 4 ให้Stringสอดคล้องCollectionอีกครั้งดังนั้นจึงเป็นไปได้ที่จะใช้dropFirstและdropLastตัดแต่งจุดเริ่มต้นและจุดสิ้นสุดของสตริง ผลลัพธ์เป็นประเภทSubstringดังนั้นคุณต้องส่งต่อไปยังตัวStringสร้างเพื่อรับกลับ a String:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()และdropLast()ใช้Intเพื่อระบุจำนวนอักขระที่จะดรอป:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
หากคุณระบุอักขระที่จะดรอปมากกว่าที่มีอยู่ในสตริงผลลัพธ์จะเป็นสตริงว่าง ( "")
let result5 = String(str.dropFirst(10)) // ""
อัปเดตสำหรับ Swift 3
หากคุณต้องการลบอักขระตัวแรกและต้องการเปลี่ยนสตริงเดิมให้ดูคำตอบของ @ MickMacCallum substring(from:)หากคุณต้องการที่จะสร้างสตริงใหม่ในขั้นตอนการใช้ มีนามสกุลเป็นStringคุณสามารถซ่อนความอัปลักษณ์ของsubstring(from:)และsubstring(to:)สร้างส่วนเพิ่มเติมที่มีประโยชน์เพื่อตัดทอนจุดเริ่มต้นและจุดสิ้นสุดของ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"
ชอบdropFirstและdropLastก่อนที่พวกเขาฟังก์ชันเหล่านี้จะผิดพลาดถ้ามีไม่พอตัวอักษรที่มีอยู่ในสตริง ความรับผิดชอบอยู่ที่ผู้โทรเพื่อใช้อย่างเหมาะสม นี่เป็นการตัดสินใจในการออกแบบที่ถูกต้อง หนึ่งสามารถเขียนเพื่อส่งคืนตัวเลือกซึ่งจะต้องถูกแกะออกโดยผู้โทร
สวิฟต์ 2.x
อนิจจาในสวิฟท์ 2 , dropFirstและdropLast(ทางออกที่ดีที่สุดก่อนหน้านี้) ไม่ได้เป็นความสะดวกที่พวกเขาก่อน ด้วยการขยายไปถึงStringคุณสามารถซ่อนความน่าเกลียดของsubstringFromIndexและ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"
กดไลค์dropFirstและdropLastก่อนที่พวกเขาฟังก์ชันเหล่านี้จะผิดพลาดถ้ามีไม่พอตัวอักษรที่มีอยู่ในสตริง ความรับผิดชอบอยู่ที่ผู้โทรเพื่อใช้อย่างเหมาะสม นี่เป็นการตัดสินใจในการออกแบบที่ถูกต้อง หนึ่งสามารถเขียนเพื่อส่งคืนตัวเลือกซึ่งจะต้องถูกแกะออกโดยผู้โทร
ในSwift 1.2คุณจะต้องเรียกchopPrefixสิ่งนี้:
"hello".chopPrefix(count: 3) // "lo"
หรือคุณสามารถเพิ่มขีดล่าง_ให้กับนิยามของฟังก์ชันเพื่อระงับชื่อพารามิเตอร์:
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สิ่งทั้งหมดได้โดยการส่งdisplay.text!ไปที่ NSString ฉันไม่ได้บอกว่านั่นเป็นทางออกที่ดี - เพียงแค่แก้ไขความเข้าใจผิดที่อาจเกิดขึ้น ด้วย NSString คุณสามารถสร้างดัชนีด้วย Int - และสาเหตุที่คุณไม่สามารถสร้างดัชนีด้วย Int ได้ไม่ใช่เพราะ Unicode เป็นเพราะตัวละครสามารถประกอบด้วยจุดรหัสผสมหลายตัว