So erhalten Sie die Koordinaten (x, y) eines Zeichens in einem String
Ich muss die xy-Koordinate eines Zeichens in einem String abrufen, konnte aber keine aktuellen Antworten finden. Wie kann ich das erreichen? Ich habe diesen Artikel hier gefunden: Swift: Wie finde ich die Position (x, y) eines Buchstabens in einem UILabel? aber .rangeOfString ist nicht mehr verfügbar:
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)
}
Wissen Sie, wie Sie es wieder zum Laufen bringen können?
Antworten
Ihre Swift-Syntax ist sehr alt (Swift 2). Wechseln Sie range.startIndex
zu range.lowerBound
. substringToIndex
heißt jetzt Teilzeichenfolge (to: Index), ist aber veraltet. Sie sollten den Index verwenden self[..<range.lowerBound]
. Übrigens müssen range(of: String)
Sie String nicht verwenden, wenn Sie nach einem Index eines Zeichens suchen. Sie können die Erfassungsmethode verwenden 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)
}
}