2016年01月05日星期二
真是搞了個(gè)開門紅配喳,元旦就感冒了。比樂購族淮。雖病痛加身辫红,我亦不屈不懼凭涂。嗚嗚嗚~~
最近抽空看了看swift,覺得這個(gè)語言真的是優(yōu)雅厉熟,給我?guī)砹吮容^多的驚喜,但较幌,我依然持保留態(tài)度揍瑟,因?yàn)椋瑵撘庾R(shí)中乍炉,覺得绢片,我還沒有學(xué)習(xí)的ruby應(yīng)該會(huì)給我?guī)砀嗟捏@喜。
-
今天主要說兩個(gè)事:
- 代理
- 閉包
-
代理
swift的代理和OC的代理基本一致(我現(xiàn)在是這么認(rèn)為的)岛琼,但是OC中有純正的可選代理方法底循,而swift卻沒有,要達(dá)到同樣的效果槐瑞,得跟oc去雜交
-
1 首先熙涤,定義一份協(xié)議
protocol ViewControllerProrocol{
//1.代理方法,將字符串傳遞給調(diào)用者
func fuckthedelegate(str:String)
}
-
2 定義一個(gè)代理屬性
//2.聲明代理屬性
var delegate : ViewControllerProrocol?
-
3 判斷代理是否實(shí)現(xiàn)代理方法,如果實(shí)現(xiàn)將服務(wù)器返回的字典進(jìn)行反序列化后傳遞給調(diào)用者
//3.傳遞給調(diào)用者
func btnClick(sender:AnyObject){
self.delegate?.fuckthedelegate("竟然成功了困檩,我跟誰說理去祠挫?")
}
-
4 調(diào)用者進(jìn)行的操作
//4.
class ViewController: UIViewController, ViewControllerProrocol {
//other code
//MARK:-delegate代理
func fuckthedelegate(str: String) {
print(str)
}
}
-
swift可選代理
-
如上,swift代理的聲明和使用悼沿,還是感覺比oc要簡潔很多,但是等舔,swift現(xiàn)在是沒有可選代理的,也就是說糟趾,你代理中慌植,定義的方法,每一個(gè)都要在調(diào)用者中進(jìn)行實(shí)現(xiàn)义郑,不然無法編譯(天啦擼蝶柿,弱水三千我只取一瓢~~~),怎么辦喃? 和oc去雜交非驮,也有一說是oc剩下的渣···不過只锭,我覺得,有解決方法就挺好院尔。
//聲明一份協(xié)議
-
@objc protocol ViewControllerProrocol{
//聲明代理方法
optional func fuckthedelegate(str:String)//可選實(shí)現(xiàn)
func fuckthedelegate()//必須實(shí)現(xiàn)
}
class ViewController1: UIViewController {
//other code
}
+ #### 注意上面要加上@objc 和 optional這兩個(gè)關(guān)鍵字 在調(diào)用的時(shí)候要加個(gè)可選鏈(?)
//3.傳遞給調(diào)用者
func btnClick(sender:AnyObject){
self.delegate?.fuckthedelegate蜻展?("竟然成功了,我跟誰說理去邀摆?")
}
+ #### 基本上就這樣了纵顾,也沒有深究其他的東西,以后如果研究的深了可能再回來總結(jié)吧(later equal never)英語差栋盹,有錯(cuò)單詞施逾,別BB,接下來總結(jié)閉包```
- ### 閉包
閉包,在我的理解汉额,就是代碼塊曹仗。可以做代碼塊可以做的事情蠕搜。閉包不是必須的怎茫,它的存在只是錦上添花。閉包可以捕獲和存儲(chǔ)上下文中定義的的任何常量和變量的引用妓灌。這就是所謂的變量和變量的自封閉轨蛤,因此命名為”閉包“("Closures)").Swift還會(huì)處理所有捕獲的引用的內(nèi)存管理。
* #### 全局函數(shù)和嵌套函數(shù)其實(shí)就是特殊的閉包虫埂。
* #### 閉包的形式有:
* (1)全局函數(shù)都是閉包祥山,有名字但不能捕獲任何值。
* (2)嵌套函數(shù)都是閉包掉伏,且有名字缝呕,也能捕獲封閉函數(shù)內(nèi)的值。
* (3)閉包表達(dá)式都是無名閉包斧散,使用輕量級(jí)語法岳颇,可以根據(jù)上下文環(huán)境捕獲值。
* #### Swift中的閉包有很多優(yōu)化的地方:
* (1)根據(jù)上下文推斷參數(shù)和返回值類型
* (2)從單行表達(dá)式閉包中隱式返回(也就是閉包體只有一行代碼颅湘,可以省略return)
* (3)可以使用簡化參數(shù)名话侧,如$0, $1(從0開始,表示第i個(gè)參數(shù)...)
* (4)提供了尾隨閉包語法(Trailing closure syntax)
* #### Swift中的閉包的表達(dá)式: {(parameters) -> returnType in statements}
* ### 總結(jié)
* #### 之前講過block可以fuck Delegate闯参,這個(gè)閉包也可以瞻鹏。步驟按照前面的那個(gè)類似的就可以。代碼就不寫了鹿寨,麻煩新博。雖然閉包不是必須的,但是很多大牛寫東西都用了閉包的脚草,不玩轉(zhuǎn)這個(gè)赫悄,大牛寫的東西你都看不懂的×罂總結(jié)就先告一段落埂淮,等再學(xué)習(xí)一段時(shí)間,多用用写隶,沒準(zhǔn)就有其他的想法了倔撞。