Jak uzyskać współrzędne (x, y) znaku w łańcuchu
Dec 21 2020
Muszę uzyskać współrzędną xy znaku w ciągu, ale nie mogę znaleźć żadnych aktualnych odpowiedzi. Jak mogę to osiągnąć? Znalazłem ten artykuł tutaj: Swift: Jak znaleźć pozycję (x, y) litery w UILabel? ale .rangeOfString nie jest już dostępny:
extension String {
func characterPosition(character: Character, withFont: UIFont = UIFont.systemFontOfSize(18.0)) -> CGPoint? {
guard let range = self.rangeOfString(String(character)) else {
print("\(character) is missed")
return nil
}
let prefix = self.substringToIndex(range.startIndex) as NSString
let size = prefix.sizeWithAttributes([NSFontAttributeName: withFont])
return CGPointMake(size.width, 0)
}
Czy wiesz, jak sprawić, by znów działał?
Odpowiedzi
1 LeoDabus Dec 21 2020 at 03:23
Twoja składnia Swift jest naprawdę stara (Swift 2). Zmień range.startIndex
na range.lowerBound
. substringToIndex
jest teraz nazywany podciągiem (to: Index), ale jest przestarzały, należy użyć indeksu dolnego self[..<range.lowerBound]
. Przy okazji, nie ma potrzeby używania String, range(of: String)
jeśli szukasz indeksu znaku. Możesz użyć metody zbierania firstIndex(of: Element)
:
extension StringProtocol {
func characterPosition(character: Character, with font: UIFont = .systemFont(ofSize: 18.0)) -> CGPoint? {
guard let index = firstIndex(of: character) else {
print("\(character) is missed")
return nil
}
let string = String(self[..<index])
let size = string.size(withAttributes: [.font: font])
return CGPoint(x: size.width, y: 0)
}
}