我有一个方法可以检测字符串中的网址并返回网址及其出现位置的范围。但是,当字符串中包含表情符号时,一切都不再完美。例如:
"I'm gonna do this callenge as soon as I can swing again \n http://youtu.be/SW_d3fGz1hk"
由于表情符号的存在,从文本中提取的url是http://youtu.be/SW_d3fGz1而不是http://youtu.be/SW_d3fGz1hk。我觉得最简单的解决方法是用空格字符替换字符串中的表情符号(因为我需要某些文本样式中的正确范围)。问题是,使用Swift实现这一点非常困难(很可能是我对Swift String API的能力不足)。
我一直尝试这样做,但似乎无法从Unicode代码点数组创建字符串:
var emojilessStringWithSubstitution: String {
let emojiRanges = [0x1F601...0x1F64F, 0x2702...0x27B0]
let emojiSet = Set(emojiRanges.flatten())
let codePoints: [UnicodeScalar] = self.unicodeScalars.map {
if emojiSet.contains(Int($0.value)) {
return UnicodeScalar(32)
}
return $0
}
return String(codePoints)
}
我这样解决问题的方式是不正确的吗?替换表情符号是最好的解决方案吗?如果是,我该如何做呢?
reduce()
。如果我只是将filter()
的结果传递给一个字符串构造函数,它似乎可以工作。 - Graham Lea