Cara mendapatkan koordinat (x, y) dari karakter dalam String
Saya perlu mendapatkan koordinat xy dari karakter dalam String, tetapi tidak dapat menemukan jawaban terbaru. Bagaimana saya bisa mencapai ini? Saya menemukan artikel ini di sini: Swift: Bagaimana cara menemukan posisi (x, y) dari sebuah huruf dalam UILabel? tetapi .rangeOfString tidak tersedia lagi:
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)
}
Apakah Anda tahu cara membuatnya berfungsi kembali?
Jawaban
Sintaks Swift Anda benar-benar lama (Swift 2). Ganti range.startIndex
ke range.lowerBound
. substringToIndex
sekarang disebut substring (to: Index) tetapi sudah usang, Anda harus menggunakan subskrip self[..<range.lowerBound]
. Btw tidak perlu menggunakan String range(of: String)
jika Anda mencari indeks karakter. Anda dapat menggunakan metode pengumpulan 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)
}
}