在使用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))" }
现在是解释。所以首先可以跳过append这一行,直接一句话返回:
let countryFlag = country.unicodeScalars.reduce("") { (var flag, code) in
return flag + "\(UnicodeScalar(base + code.value))"
}
之后您可以跳过声明 flag
和 code
变量,因为它们可以推断为 $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))" }
关于swift - Compact SWIFT Reduce 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007721/