我正在寻找一种快速解决方法:
let germany = "DE"
到
let flag = "\u{1f1e9}\u{1f1ea}"
即,D
到1f1e9
和E
到1f1ea
的映射是什么
我在查看.utf8
字符串,但这会返回一个整数。
FWIW我的总体目标是能够获取任意国家代码并获得相应的表情符号标志。
编辑:如果它可以在某个地方使用,我也可以拿着一个执行此映射的表。我用Google搜索但没找到它。
答案 0 :(得分:63)
以下是将两个字母的国家/地区代码转换为表情符号标记的通用公式:
BoardStart.format("MM-DD-YYYY");
编辑 Ooops,无需通过嵌套的String.UnicodeScalarView结构。事实证明,String恰好具有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")
方法。所以:
append
EDIT 再次Oooops,在Swift 3中他们取消了将UnicodeScalar附加到String的能力,并且他们使UnicodeScalar初始化器可用(Xcode 8种子6),所以现在它看起来像这样:
func flag(country:String) -> String {
let base : UInt32 = 127397
var s = ""
for v in country.unicodeScalars {
s.append(UnicodeScalar(base + v.value))
}
return s
}
答案 1 :(得分:17)
如果在ObjectiveC中寻找解决方案的任何人都是方便的类别:
@interface NSLocale (RREmoji)
+ (NSString *)emojiFlagForISOCountryCode:(NSString *)countryCode;
@end
@implementation NSLocale (RREmoji)
+ (NSString *)emojiFlagForISOCountryCode:(NSString *)countryCode {
NSAssert(countryCode.length == 2, @"Expecting ISO country code");
int base = 127462 -65;
wchar_t bytes[2] = {
base +[countryCode characterAtIndex:0],
base +[countryCode characterAtIndex:1]
};
return [[NSString alloc] initWithBytes:bytes
length:countryCode.length *sizeof(wchar_t)
encoding:NSUTF32LittleEndianStringEncoding];
}
@end
试验:
for ( NSString *countryCode in [NSLocale ISOCountryCodes] ) {
NSLog(@"%@ - %@", [NSLocale emojiFlagForISOCountryCode:countryCode], countryCode);
}
输出: - 广告 - AE - AF - AG - AI ...
答案 2 :(得分:7)
另一个使用Swift 5将两个字母的国家/地区代码转换为表情符号标志的功能。
internal func getFlag(from countryCode: String) -> String {
return countryCode
.unicodeScalars
.map({ 127397 + $0.value })
.compactMap(UnicodeScalar.init)
.map(String.init)
.joined()
}
答案 3 :(得分:4)
对亚特答案的两个优化。
这是代码。
func flag(from country:String) -> String {
let base : UInt32 = 127397
var s = ""
for v in country.uppercased().unicodeScalars {
s.unicodeScalars.append(UnicodeScalar(base + v.value)!)
}
return s
}
答案 4 :(得分:2)
更多地了解哑光答案
Swift 2版
public static func flag(countryCode: String) -> Character {
let base = UnicodeScalar("").value - UnicodeScalar("A").value
let string = countryCode.uppercaseString.unicodeScalars.reduce("") {
var string = $0
string.append(UnicodeScalar(base + $1.value))
return string
}
return Character(string)
}
Swift 3版本,取自https://github.com/onmyway133/Smile/blob/master/Sources/Smile.swift#L52
public func emoji(countryCode: String) -> Character {
let base = UnicodeScalar("").value - UnicodeScalar("A").value
var string = ""
countryCode.uppercased().unicodeScalars.forEach {
if let scala = UnicodeScalar(base + $0.value) {
string.append(String(describing: scala))
}
}
return Character(string)
}
答案 5 :(得分:2)
我知道这并不是所要的,但也许可以帮助某人:
var flagDictionary: [String: String] = [
"AD": "??", "AE": "??", "AF": "??", "AG": "??", "AI": "??", "AL": "??", "AM": "??", "AO": "??", "AQ": "??", "AR": "??", "AS": "??", "AT": "??", "AU": "??", "AW": "??", "AX": "??", "AZ": "??", "BA": "??", "BB": "??", "BD": "??", "BE": "??", "BF": "??", "BG": "??", "BH": "??", "BI": "??", "BJ": "??", "BL": "??", "BM": "??", "BN": "??", "BO": "??", "BQ": "??", "BR": "??", "BS": "??", "BT": "??", "BV": "??", "BW": "??", "BY": "??", "BZ": "??", "CA": "??", "CC": "??", "CD": "??", "CF": "??", "CG": "??", "CH": "??", "CI": "??", "CK": "??", "CL": "??", "CM": "??", "CN": "??", "CO": "??", "CR": "??", "CU": "??", "CV": "??", "CW": "??", "CX": "??", "CY": "??", "CZ": "??", "DE": "??", "DJ": "??", "DK": "??", "DM": "??", "DO": "??", "DZ": "??", "EC": "??", "EE": "??", "EG": "??", "EH": "??", "ER": "??", "ES": "??", "ET": "??", "FI": "??", "FJ": "??", "FK": "??", "FM": "??", "FO": "??", "FR": "??", "GA": "??", "GB": "??", "GD": "??", "GE": "??", "GF": "??", "GG": "??", "GH": "??", "GI": "??", "GL": "??", "GM": "??", "GN": "??", "GP": "??", "GQ": "??", "GR": "??", "GS": "??", "GT": "??", "GU": "??", "GW": "??", "GY": "??", "HK": "??", "HM": "??", "HN": "??", "HR": "??", "HT": "??", "HU": "??", "ID": "??", "IE": "??", "IL": "??", "IM": "??", "IN": "??", "IO": "??", "IQ": "??", "IR": "??", "IS": "??", "IT": "??", "JE": "??", "JM": "??", "JO": "??", "JP": "??", "KE": "??", "KG": "??", "KH": "??", "KI": "??", "KM": "??", "KN": "??", "KP": "??", "KR": "??", "KW": "??", "KY": "??", "KZ": "??", "LA": "??", "LB": "??", "LC": "??", "LI": "??", "LK": "??", "LR": "??", "LS": "??", "LT": "??", "LU": "??", "LV": "??", "LY": "??", "MA": "??", "MC": "??", "MD": "??", "ME": "??", "MF": "??", "MG": "??", "MH": "??", "MK": "??", "ML": "??", "MM": "??", "MN": "??", "MO": "??", "MP": "??", "MQ": "??", "MR": "??", "MS": "??", "MT": "??", "MU": "??", "MV": "??", "MW": "??", "MX": "??", "MY": "??", "MZ": "??", "NA": "??", "NC": "??", "NE": "??", "NF": "??", "NG": "??", "NI": "??", "NL": "??", "NO": "??", "NP": "??", "NR": "??", "NU": "??", "NZ": "??", "OM": "??", "PA": "??", "PE": "??", "PF": "??", "PG": "??", "PH": "??", "PK": "??", "PL": "??", "PM": "??", "PN": "??", "PR": "??", "PS": "??", "PT": "??", "PW": "??", "PY": "??", "QA": "??", "RE": "??", "RO": "??", "RS": "??", "RU": "??", "RW": "??", "SA": "??", "SB": "??", "SC": "??", "SD": "??", "SE": "??", "SG": "??", "SH": "??", "SI": "??", "SJ": "??", "SK": "??", "SL": "??", "SM": "??", "SN": "??", "SO": "??", "SR": "??", "SS": "??", "ST": "??", "SV": "??", "SX": "??", "SY": "??", "SZ": "??", "TC": "??", "TD": "??", "TF": "??", "TG": "??", "TH": "??", "TJ": "??", "TK": "??", "TL": "??", "TM": "??", "TN": "??", "TO": "??", "TR": "??", "TT": "??", "TV": "??", "TW": "??", "TZ": "??", "UA": "??", "UG": "??", "UM": "??", "US": "??", "UY": "??", "UZ": "??", "VA": "??", "VC": "??", "VE": "??", "VG": "??", "VI": "??", "VN": "??", "VU": "??", "WF": "??", "WS": "??", "YE": "??", "YT": "??", "ZA": "??", "ZM": "??", "ZW": "??"
]
答案 6 :(得分:0)
对于更具功能性的方法,不使用可变变量,请使用:
private func flag(country: String) -> String {
let base: UInt32 = 127397
return country.unicodeScalars
.flatMap({ UnicodeScalar(base + $0.value) })
|> String.UnicodeScalarView.init
|> String.init
}
|>
运算符是函数应用程序运算符的位置,就像" pipe"为了更自然的阅读顺序:我们采用标量,将它们映射到新的标量,将其转换为视图,然后将其转换为字符串。
它的定义如下:
infix operator |> : MultiplicationPrecedence
func |> <T, U>(left: T, right: (T) -> U) -> U {
return right(left)
}
如果没有自定义运算符,我们仍然可以在没有可变状态的情况下执行此操作:
private func flag(country: String) -> String {
let base: UInt32 = 127397
return String(String.UnicodeScalarView(
country.unicodeScalars.flatMap({ UnicodeScalar(base + $0.value) })
))
}
但是恕我直言,这听起来有点&#34;向后&#34;,因为操作的自然流程既不会读出也不读取,而是读取两者。