एक स्ट्रिंग में एक चरित्र के निर्देशांक (x, y) कैसे प्राप्त करें
मुझे एक स्ट्रिंग में एक वर्ण के xy समन्वय को प्राप्त करने की आवश्यकता है, लेकिन किसी भी तारीख तक जवाब नहीं मिल सका। इसे कैसे प्राप्त किया जा सकता है? मुझे यह लेख यहां मिला: स्विफ्ट: मैं एक UILabel में एक पत्र की स्थिति (x, y) कैसे खोजूं? लेकिन .rangeOfString अब उपलब्ध नहीं है:
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)
}
क्या आप जानते हैं कि इसे फिर से काम करने के लिए कैसे प्राप्त किया जाए?
जवाब
आपका स्विफ्ट सिंटैक्स वास्तव में पुराना है (स्विफ्ट 2)। बदलें range.startIndex
करने के लिए range.lowerBound
। substringToIndex
अब इसे सबस्ट्रिंग (इंडेक्स:) कहा जाता है, लेकिन इसे हटा दिया जाता है, आपको सबस्क्रिप्ट का उपयोग करना चाहिए self[..<range.lowerBound]
। Btw range(of: String)
अगर आप एक चरित्र के सूचकांक के लिए देख रहे हैं स्ट्रिंग का उपयोग करने की कोई जरूरत नहीं है । आप संग्रह विधि का उपयोग कर सकते हैं 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)
}
}