Cara mendapatkan koordinat (x, y) dari karakter dalam String

Dec 21 2020

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

1 LeoDabus Dec 21 2020 at 03:23

Sintaks Swift Anda benar-benar lama (Swift 2). Ganti range.startIndexke range.lowerBound. substringToIndexsekarang 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)
    }
}