Swift:使用本地閉包

作者:Thomas Hanning,原文鏈接,原文日期:2015-10-22
譯者:小鍋;校對(duì):千葉知風(fēng);定稿:千葉知風(fēng)

閉包一般是用來作為函數(shù)的參數(shù)。不過某些情況下,使用本地閉包也是十分方便的。

假設(shè)有一個(gè) ViewController,里面包含了兩種 GUI 模式:

enum GUIMode {
    case Mode1
    case Mode2
}

對(duì)于每一種 GUI 模式,我們都需要對(duì)三個(gè) label 設(shè)置某些屬性:

var guiMode: GUIMode = .Mode1 {
    didSet {              
        switch guiMode {
        case .Mode1:
            label1.text = "1"
            label1.textColor = UIColor.redColor()
            label1.font = UIFont(name: "HelveticaNeue", size: 10)
                
            label2.text = "2"
            label2.textColor = UIColor.blueColor()
            label2.font = UIFont(name: "HelveticaNeue", size: 12)
                
            label3.text = "3"
            label3.textColor = UIColor.yellowColor()
            label3.font = UIFont(name: "HelveticaNeue", size: 11)
                
        case .Mode2:
            label1.text = "4"
            label1.textColor = UIColor.yellowColor()
            label1.font = UIFont(name: "HelveticaNeue", size: 11)
                
            label2.text = "5"
            label2.textColor = UIColor.blueColor()
            label2.font = UIFont(name: "HelveticaNeue", size: 9)
                
            label3.text = "6"
            label3.textColor = UIColor.brownColor()
            label3.font = UIFont(name: "HelveticaNeue", size: 10)
        }           
    }
}

這里有很多重復(fù)的代碼。你可以創(chuàng)建一個(gè)函數(shù),在函數(shù)里對(duì)一個(gè) label 的屬性進(jìn)行設(shè)置,但是這個(gè)函數(shù)我們基本不會(huì)在別的地方再次使用。因此,在這種情況下使用閉包就是一個(gè)相當(dāng)不錯(cuò)的解決方案:

var guiMode: GUIMode = .Mode1 {
    didSet {      
        let styleLabel: (label:UILabel,text:String,color:UIColor,size:CGFloat) -> () = { (label,text,color,size) in
            label.text = text
            label.textColor = color
            label.font = UIFont(name: "HelveticaNeue", size:size)
        }
                        
        switch guiMode {
        case .Mode1:
            styleLabel(label: label1, text: "1", color: UIColor.redColor(), size:10)
            styleLabel(label: label2, text: "2", color: UIColor.blueColor(), size:12)
            styleLabel(label: label3, text: "3", color: UIColor.yellowColor(), size:11)
        case .Mode2:
            styleLabel(label: label1, text: "4", color: UIColor.yellowColor(), size:11)
            styleLabel(label: label2, text: "5", color: UIColor.blackColor(), size:9)
            styleLabel(label: label3, text: "6", color: UIColor.brownColor(), size:10)
        }
    }
}

這樣一來,代碼就少了很多,看起來也更加簡(jiǎn)潔了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容