我正在寻找一种快速的方式来转变:
let germany = "DE"
Run Code Online (Sandbox Code Playgroud)
成
let flag = "\u{1f1e9}\u{1f1ea}"
Run Code Online (Sandbox Code Playgroud)
也就是说,什么是映射D
到1f1e9
,并E
以1f1ea
我一直在寻找.utf8
的字符串,但这返回一个整数.
FWIW我的总体目标是能够获取任意国家代码并获得相应的表情符号标志.
编辑:我也很好,只是拿着一个表,如果它可以在某处使用这个映射.我用Google搜索但没找到它.
mat*_*att 74
这是将两个字母的国家/地区代码转换为表情符号标志的通用公式:
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")
Run Code Online (Sandbox Code Playgroud)
编辑 Ooops,无需通过嵌套的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
}
Run Code Online (Sandbox Code Playgroud)
再次编辑 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.unicodeScalars.append(UnicodeScalar(base + v.value)!)
}
return String(s)
}
Run Code Online (Sandbox Code Playgroud)
Rol*_*asR 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
Run Code Online (Sandbox Code Playgroud)
测试:
for ( NSString *countryCode in [NSLocale ISOCountryCodes] ) {
NSLog(@"%@ - %@", [NSLocale emojiFlagForISOCountryCode:countryCode], countryCode);
}
Run Code Online (Sandbox Code Playgroud)
输出: - AD - AE - AF - AG - AI ......
bud*_*ino 10
我知道这不完全是被问到的,但也许它会帮助某人:
let flags: [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": ""
]
Run Code Online (Sandbox Code Playgroud)
小智 9
使用 Swift 5 将两个字母的国家/地区代码转换为其表情符号标志的另一个功能。
internal func getFlag(from countryCode: String) -> String {
countryCode
.unicodeScalars
.map({ 127397 + $0.value })
.compactMap(UnicodeScalar.init)
.map(String.init)
.joined()
}
Run Code Online (Sandbox Code Playgroud)
我使用这个实现
func countryFlag(_ countryCode: String) -> String {
let flagBase = UnicodeScalar("").value - UnicodeScalar("A").value
let flag = countryCode
.uppercased()
.unicodeScalars
.compactMap({ UnicodeScalar(flagBase + $0.value)?.description })
.joined()
return flag
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以在 Playground 中用这种方法测试这个函数
let isoCodes = Locale.isoRegionCodes
for isoCode in isoCodes {
print(countryFlag(isoCode))
}
Run Code Online (Sandbox Code Playgroud)
我们得到
马特答案的两种优化。
这是代码。
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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9520 次 |
最近记录: |