一尘不染

快速通过Unicode将国家代码转换为表情符号标志

swift

我正在寻找一种快速的方法来使类似:

let germany = "DE"

进入

let flag = "\u{1f1e9}\u{1f1ea}"

即, 我一直在寻找字符串的Dto 1f1e9Eto 的映射,但这返回一个整数。1f1ea``.utf8

FWIW我的总体目标是能够采用任意国家/地区代码并获得相应的表情符号标志。

编辑:我也很好,只要持有一个做此映射的表(如果有的话)。我在附近搜索,但没有找到。


阅读 298

收藏
2020-07-07

共1个答案

一尘不染

这是将两个字母的国家/地区代码转换为其表情符号标志的通用公式:

func flag(country:String) -> String {
    let base = 127397
    var usv = String.UnicodeScalarView()
    for i in country.utf16 {
        usv.append(UnicodeScalar(base + Int(i)))
    }
    return String(usv)
}

let s = flag("DE")

编辑 糟糕,无需传递嵌套的String.UnicodeScalarView结构。事实证明String
append恰好有一个用于此目的的方法。所以:

func flag(country:String) -> String { 
    let base : UInt32 = 127397
    var s = ""
    for v in country.unicodeScalars {
        s.append(UnicodeScalar(base + v.value))
    }
    return s
}

*再次 *编辑 ,在Swift
3中,他们取消了将UnicodeScalar附加到字符串的功能,并且使UnicodeScalar初始化程序失败(Xcode
8种子6),所以现在看起来像这样:

func flag(country:String) -> String {
    let base : UInt32 = 127397
    var s = ""
    for v in country.unicodeScalars {
        s.unicodeScalars.append(UnicodeScalar(base + v.value)!)
    }
    return String(s)
}
2020-07-07