2016-03-15 66 views
1

在使用ISO国家代码获取国家国旗形式表情符号的过程中,我提出了这种封闭。 任何建议,使其与匿名封闭更紧凑?紧凑型SWIFT减少封闭

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

回答

1

我张贴你的答案很简单,我将提供后不久详细的解释:

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))" 
} 

之后,您可以跳过声明flagcode变量,因为它们可以被推断为$0$1

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

最后,如果您的关闭包含单个返回语句,则可以省略return关键字。我更喜欢将它们移动到单行以获得更好的可读性:

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

我很感激你的时间,我被卡在试图申请附加在$ 0上。谢谢 –

+0

'append'不返回任何东西(它被声明为'void') - 而是修改对象。这就是为什么你不能在return语句中使用它。然而,使用二元运算符'+'会返回操作的结果(不修改对象),这就是为什么它没问题。如果您发现我的答案有帮助,您可以考虑将其标记为已接受。快乐时光;) –