Chỉ truy cập ngược
Cách tốt nhất là sử dụng substringToIndexkết hợp thuộc endIndextính và advancechức năng toàn cục.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Tìm kiếm một chuỗi bắt đầu từ phía sau
Sử dụng rangeOfStringvà đặt optionsthành.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Không có phần mở rộng, Swift thuần túy thành ngữ
Swift 2.0
advancebây giờ là một phần của Indexvà được gọi advancedBy. Bạn làm điều đó như:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
Bạn không thể gọi advancedBya Stringvì nó có các phần tử kích thước thay đổi. Bạn phải sử dụng index(_, offsetBy:).
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Rất nhiều thứ đã được đổi tên. Các trường hợp được viết bằng camelCase, startIndexđã trở thành lowerBound.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Ngoài ra, tôi không khuyên bạn nên bắt buộc mở gói index2. Bạn có thể sử dụng ràng buộc tùy chọn hoặc map. Cá nhân tôi thích sử dụng map:
var substring3 = index2.map(string2.substring(to:))
Swift 4
Phiên bản Swift 3 vẫn còn hiệu lực nhưng bây giờ bạn có thể sử dụng subscript với các phạm vi chỉ mục:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
Cách tiếp cận thứ hai vẫn không thay đổi:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))