Swift 紧凑快速减少关闭

Swift 紧凑快速减少关闭,swift,reduce,emoticons,country-codes,Swift,Reduce,Emoticons,Country Codes,在使用ISO国家代码获取一个国家的国旗形表情符号的过程中,我得出了这个结论。 有什么建议可以让匿名闭包更紧凑吗 let base : UInt32 = 127397 let country = "CH" let countryFlag = country.unicodeScalars.reduce("") { (var flag, code) in flag.append((UnicodeScalar(base + code.value))) retur

在使用ISO国家代码获取一个国家的国旗形表情符号的过程中,我得出了这个结论。 有什么建议可以让匿名闭包更紧凑吗

    let base : UInt32 = 127397
    let country = "CH"
    let countryFlag = country.unicodeScalars.reduce("") { (var flag, code)  in
    flag.append((UnicodeScalar(base + code.value)))
    return  flag 
}

我将向您发布简短答案,稍后我将提供详细解释:

let countryFlag = country.unicodeScalars.reduce("") { $0 + "\(UnicodeScalar(base + $1.value))" }
现在是解释。因此,首先,您可以通过追加跳过该行,直接用一句话返回:

let countryFlag = country.unicodeScalars.reduce("") { (var flag, code)  in
    return  flag + "\(UnicodeScalar(base + code.value))"
}
之后,您可以跳过声明
标志
代码
变量,因为它们可以推断为
$0
$1

let countryFlag = country.unicodeScalars.reduce("") {
    return  $0 + "\(UnicodeScalar(base + $1.value))"
}
最后,如果闭包由单个return语句组成,则可以省略
return
关键字。我更喜欢在单行上移动它们以提高可读性:

let countryFlag = country.unicodeScalars.reduce("") { $0 + "\(UnicodeScalar(base + $1.value))" }

感谢您抽出时间,我一直在尝试申请追加0美元。谢谢
append
不返回任何内容(声明为
void
)-而是修改对象。这就是为什么不能在return语句中使用它。但是,使用二进制运算符
+
返回操作的结果(不修改对象),这就是为什么可以这样做的原因。如果你觉得我的答案有用,你可以考虑把它标记为接受。愉快地游泳;)