2016-03-15 68 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語句中使用它。然而,使用二元運算符'+'會返回操作的結果(不修改對象),這就是爲什麼它沒問題。如果您發現我的答案有幫助,您可以考慮將其標記爲已接受。快樂時光;) –