อัปเดตสำหรับ 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 เป็นเพราะตัวละครสามารถประกอบด้วยจุดรหัสผสมหลายตัว