Chỉ truy cập ngược
Cách tốt nhất là sử dụng substringToIndex
kết hợp thuộc endIndex
tính và advance
chứ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 rangeOfString
và đặt options
thà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
advance
bây giờ là một phần của Index
và đượ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 advancedBy
a String
vì 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:))