एक स्ट्रिंग में एक चरित्र के निर्देशांक (x, y) कैसे प्राप्त करें

Dec 21 2020

मुझे एक स्ट्रिंग में एक वर्ण के 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)
}

क्या आप जानते हैं कि इसे फिर से काम करने के लिए कैसे प्राप्त किया जाए?

जवाब

1 LeoDabus Dec 21 2020 at 03:23

आपका स्विफ्ट सिंटैक्स वास्तव में पुराना है (स्विफ्ट 2)। बदलें range.startIndexकरने के लिए range.lowerBoundsubstringToIndexअब इसे सबस्ट्रिंग (इंडेक्स:) कहा जाता है, लेकिन इसे हटा दिया जाता है, आपको सबस्क्रिप्ट का उपयोग करना चाहिए 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)
    }
}