मैं एक पाठ एक API से आ रही के कुछ भागों रंग कर रहा हूँ (लगता ट्विटर पर के रूप में "@mention") NSAttributedString का उपयोग कर।NSAttributedString और emojis: पदों के साथ इस मुद्दे को और लंबाई
एपीआई मुझे पाठ और पाठ कर रहे हैं उल्लेख है कि के कुछ हिस्सों का प्रतिनिधित्व संस्थाओं (या लिंक, टैग, आदि) जो रंग का होना चाहिए की एक सरणी देता है।
लेकिन कभी कभी, रंगाई क्योंकि इमोजी ऑफसेट है।
उदाहरण के लिए, इस पाठ के साथ: "। कुछ पाठ @ericd @apero"
एपीआई देता है:
[ { " पाठ ":" ericd ", " लेन ": 6, " स्थिति ": 0 }, { "पाठ": "apero", "लेन": 6, "स्थिति": 18 } ]
जो मैं सफलतापूर्वक एक NSAttributedString से अनुवाद NSRange का उपयोग कर:
for m in entities.mentions {
let r = NSMakeRange(m.pos, m.len)
myAttributedString.addAttribute(NSForegroundColorAttributeName, value: someValue, range: r)
}
हम देखते हैं कि "pos": 18
सही है, यह वह जगह है जहां "@apero" शुरू होता है। रंगीन भागों "@ericd" और "@apero", के रूप में उम्मीद कर रहे हैं।
लेकिन जब इमोजी का कुछ विशिष्ट संयोजन पाठ में उपयोग किया जाता है, एपीआई NSATtributedString को अच्छी तरह से अनुवाद नहीं करता है, रंगाई ऑफसेट है:
"कुछ पाठ @ericd ✌ @apero।"
देता है:
[ { "पाठ": "ericd", "लेन": 6, "स्थिति": 0 }, { "पाठ": "apero", "लेन": 6, "स्थिति": 22 } ]
"pos": 22
: एपीआई लेखक कहा गया है कि यह सही है, और मैं उनके नज़रिए को समझते हैं।
दुर्भाग्य से, NSAttributedString सहमत नहीं है, मेरे रंगाई बंद है:
दूसरा उल्लेख के लिए अंतिम अक्षर रंग नहीं कर रहे हैं (क्योंकि "स्थिति" क्योंकि इमोजी का बहुत छोटा है ?)।
जैसा कि आप पहले ही अनुमान लगा चुके हैं, मैं एपीआई व्यवहार के तरीके को किसी भी तरह से बदल नहीं सकता, मुझे क्लाइंट पक्ष पर अनुकूलित करना होगा।
इसके अलावा ... मुझे नहीं पता कि क्या करना है। क्या मुझे यह पता लगाने की कोशिश करनी चाहिए कि पाठ में किस तरह के इमोजी हैं और समस्याग्रस्त इमोजी होने पर उल्लेखों की स्थिति में मैन्युअल रूप से संशोधन करते हैं? लेकिन यह पता लगाने के मानदंड क्या होंगे कि इमोजी स्थिति को बदल देता है और कौन नहीं करता? और यह तय कैसे करें कि मुझे कितना ऑफ़सेट चाहिए? शायद समस्या NSAttributedString के कारण हुई है?
मैं समझता हूं कि यह अलग-अलग पात्रों के रूप में उनकी लंबाई की तुलना में बनाई गई भावनाओं की लंबाई से संबंधित है, लेकिन ... अच्छा ... मैं खो गया हूं (श्वास)।
ध्यान दें कि मैं एक समाधान this stuff के लिए इसी तरह लागू करने के लिए, क्योंकि मेरी एपीआई इस एक के साथ संगत है की कोशिश की है, लेकिन यह केवल आंशिक रूप से काम किया, कुछ देता है, इमोजी अभी भी अनुक्रमित तोड़ने गया:
दिलचस्प करने के लिए आसान बनाने! (जिस श्रेणी का मैं उपयोग कर रहा हूं वह पहले से ही एक एनएसआरेंज है, हालांकि, एक स्विफ्ट रेंज नहीं है)। मुझे इसका अध्ययन करने और परीक्षण चलाने के लिए कुछ समय चाहिए, देखें कि एपीआई की तुलना में यह कैसा व्यवहार करता है।धन्यवाद, जब संभव हो तो मैं प्रतिक्रिया दूंगा। – Moritz
आपके उदाहरण में, पॉज़ 22 और लेन 6 का उपयोग करके मेरे एपीआई की तरह इस पाठ के लिए रिटर्न मिलता है, "@apero" केवल "@" के बाद शुरू होता है [पूरे उल्लेख के बजाए] [https://www.evernote.com/एल/AOznB6IhPzxJrbvva5Jxx24cyFv9MrhSqkI)। – Moritz
@EricAya: लेकिन "@apero" से "@" स्थिति 21 पर है, 22 नहीं। या आप पात्रों की गणना कैसे करते हैं? –