Como obter as coordenadas (x, y) de um caractere em uma String
Preciso obter a coordenada xy de um caractere em uma String, mas não consegui encontrar nenhuma resposta atualizada. Como posso conseguir isso? Encontrei este artigo aqui: Swift: Como faço para encontrar a posição (x, y) de uma letra em um UILabel? mas .rangeOfString não está mais disponível:
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)
}
Você sabe como fazê-lo funcionar de novo?
Respostas
Sua sintaxe Swift é muito antiga (Swift 2). Mude range.startIndex
para range.lowerBound
. substringToIndex
agora é chamado de substring (to: Index), mas está obsoleto, você deve usar subscript self[..<range.lowerBound]
. Btw, não há necessidade de usar String range(of: String)
se você estiver procurando por um índice de um caractere. Você pode usar o método de coleta 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)
}
}