A Swift String
là bộ sưu tập của Character
s và mỗi Character
đại diện cho "cụm đồ thị Unicode mở rộng".
NSString
là tập hợp các đơn vị mã UTF-16.
Ví dụ:
print("का".characters.count) // 1
print(("का" as NSString).length) // 2
Swift String
dãy được biểu diễn dưới dạng Range<String.Index>
, và NSString
dãy được biểu diễn dưới dạng NSRange
.
Chức năng của bạn đếm số Character
s từ đầu của haystack để bắt đầu kim, và đó là khác nhau từ số lượng điểm mã UTF-16.
Nếu bạn cần một "NSRange tương thích" nhân vật đếm thì phương pháp đơn giản nhất sẽ được sử dụng range(of:)
phương pháp NSString
:
let haystack = "वह बीना की खुली कोयला खदान में काम करता था।"
let needle = "काम"
if let range = haystack.range(of: needle) {
let pos = haystack.distance(from: haystack.startIndex, to: range.lowerBound)
print(pos) // 21
}
let nsRange = (haystack as NSString).range(of: needle)
if nsRange.location != NSNotFound {
print(nsRange.location) // 31
}
Ngoài ra, sử dụng xem utf16
của chuỗi Swift để đếm UTF -16 đơn vị mã:
if let range = haystack.range(of: needle) {
let lower16 = range.lowerBound.samePosition(in: haystack.utf16)
let pos = haystack.utf16.distance(from: haystack.utf16.startIndex, to: lower16)
print(pos) // 31
}
(Xem ví dụ NSRange to Range<String.Index> fo r các phương thức khác để chuyển đổi giữa Range<String.Index>
và NSRange
).
Nguồn
2016-12-22 12:59:57