Я использую это расширение, которое получает символ в определенном индексе; Однако в настоящее время он не распознает UnicodeScalars. Можете ли вы помочь мне исправить расширение, чтобы получить нужные мне результаты?
В конце я поставил несколько тестов, которые показывают результат, который я хочу получить (Test1 и Test2).
extension String {
var length: Int {
return count
}
subscript (i: Int) -> String {
return self[i ..< i + 1]
}
func substring(fromIndex: Int) -> String {
return self[min(fromIndex, length) ..< length]
}
func substring(toIndex: Int) -> String {
return self[0 ..< max(0, toIndex)]
}
subscript (r: Range<Int>) -> String {
let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
upper: min(length, max(0, r.upperBound))))
let start = index(startIndex, offsetBy: range.lowerBound)
let end = index(start, offsetBy: range.upperBound - range.lowerBound)
return String(self[start ..< end])
}
}
//How to Use the Extension:
//let str = "abcdef"
//str[1 ..< 3] // returns "bc"
//str[5] // returns "f"
//str[80] // returns ""
//str.substring(fromIndex: 3) // returns "def"
//str.substring(toIndex: str.length - 2) // returns "abcd"
var Test1 = "دب"
var Test2 = "دُبْ"
print(Test1[1]) //returns " ب " which is correct in this case
print(Test2[1]) // returns " بْ " where I want it to return the mark which is " ُ "
Test1 - текст без меток, он получает правильную позицию "ب", однако Test2 содержит метки, которые могут быть распознаны только как символы с unicodeScalars, в Test2 он получает неправильную позицию и показывает весь символ с меткой " بْ ", где я только хочу, чтобы показать знак" ُ "
Спасибо.