今天無意下載了別人swift編寫的項目,看到了Then 這個庫,懷著一顆好奇的心嫡纠,覺得好好研究一番张吉,搜了一下公眾號SwiftGG翻譯組的文章《Swift:讓人眼前一亮的初始化方式》,自己動手敲了一篇,只能說,手感真特么爽。
-
先看看比較普通的寫法,最普通的就不說了,先看這種通過Block創(chuàng)建對象的寫法,優(yōu)點:代碼整合在一個閉包里面,可讀性炒雞強痹扇。
1.無參數(shù)悯舟,無需命名担租,用$0取參數(shù),可自動聯(lián)想屬性(推薦使用)
// 使它可用于設(shè)置屬性初始化后與閉包。
// Makes it available to set properties with closures just after initializing.
let label = UILabel().then {
$0.text = "myLabel"
$0.textColor = UIColor.red
$0.font = UIFont.systemFont(ofSize: 18)
$0.center = self.view.center
$0.bounds = CGRect(x: 0, y: 0, width: 100, height: 50)
}
self.view.addSubview(label)
在Block外初始化一個對象,再傳進閉包進行設(shè)值,統(tǒng)一用取參數(shù)對象,不用再去煩如何命名了抵怎。當(dāng)然也可以命名,參考后文的寫法 不過有個缺點:里面的$0沒法自動聯(lián)想出屬性,手敲幾行代碼你就會藍(lán)瘦香菇.
大概理解上面的代碼后,接著再看使用Then協(xié)議庫的初始化寫法,比上面的代碼更簡潔,不用寫return了,而且里面的$0還能自動聯(lián)想奋救。優(yōu)點:暫時沒有吐槽點
2.帶參數(shù),可自行命名
let label2 = UILabel().then { (lab) in
lab.text = "第二個Label"
lab.textColor = UIColor.orange
lab.font = UIFont.systemFont(ofSize: 18.0)
lab.center = self.view.center
lab.bounds = CGRect(x: 0, y: 0, width: 80, height: 80)
}
self.view.addSubview(label2)