在Swift中将unicode标量表情符号转换为String

时间:2016-06-21 08:06:16

标签: ios xcode swift unicode emoji

我在从服务器获取的文本字符串中获取了emojis的unicode标量,当我在UILabel中打印时,它无法显示为表情符号。这是我从服务器获取字符串的格式:

let string = "Hi, I'm lily U+1F609"

除非将其更改为

,否则此功能无效
let string = "Hi, I'm lily \u{1F609}"

无论如何我可以将字符串转换为所需的格式吗?

我不想使用正则表达式来确定U+<HEX_CODE>的出现次数,然后将它们转换为\u{HEX_CODE}。必须有一个更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

这是为正则表达式创建的那种问题。如果有一个更简单的非正则表达式解决方案,我将删除这个答案:

func replaceWithEmoji(str: String) -> String {
    var result = str

    let regex = try! NSRegularExpression(pattern: "(U\\+([0-9A-F]+))", options: [.CaseInsensitive])
    let matches = regex.matchesInString(result, options: [], range: NSMakeRange(0, result.characters.count))

    for m in matches.reverse() {
        let range1 = m.rangeAtIndex(1)
        let range2 = m.rangeAtIndex(2)

        if let codePoint = Int(result[range2], radix: 16) {
            let emoji = String(UnicodeScalar(codePoint))
            let startIndex = result.startIndex.advancedBy(range1.location)
            let endIndex = startIndex.advancedBy(range1.length)

            result.replaceRange(startIndex..<endIndex, with: emoji)
        }
    }

    return result
}