เพียงแค่เข้าถึงย้อนหลัง
วิธีที่ดีที่สุดคือใช้substringToIndex
รวมกับendIndex
คุณสมบัติและadvance
ฟังก์ชันส่วนกลาง
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
มองหาสตริงที่เริ่มจากด้านหลัง
ใช้rangeOfString
และตั้งค่าoptions
เป็น.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
ไม่มีส่วนขยาย Swift สำนวนบริสุทธิ์
Swift 2.0
advance
ตอนนี้เป็นส่วนหนึ่งของและถูกเรียกว่าIndex
advancedBy
คุณชอบ:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
คุณไม่สามารถเรียกadvancedBy
ใช้ a ได้String
เนื่องจากมีองค์ประกอบขนาดตัวแปร คุณต้องใช้index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
หลายสิ่งหลายอย่างถูกเปลี่ยนชื่อ กรณีที่จะถูกเขียนใน CamelCase, กลายเป็นstartIndex
lowerBound
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
index2
นอกจากนี้ผมจะไม่แนะนำให้ใช้บังคับแกะ คุณสามารถใช้การผูกเพิ่มเติมหรือmap
. โดยส่วนตัวแล้วฉันชอบใช้map
:
var substring3 = index2.map(string2.substring(to:))
สวิฟต์ 4
เวอร์ชัน Swift 3 ยังคงใช้ได้ แต่ตอนนี้คุณสามารถใช้ตัวห้อยกับช่วงดัชนีได้แล้ว:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
แนวทางที่สองยังคงไม่เปลี่ยนแปลง:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))