周六部分
//1.創(chuàng)建一個(gè)閉包
typealiassendValueClosure=(string:String)->Void//類似于OC中的typedefsendValueClosure名字string參數(shù)Void返回值
//2.聲明一個(gè)閉包屬性
varmyClosure:sendValueClosure?
//3.創(chuàng)建閉包屬性的init方法(ps:是否能不寫纵诞?鸥拧?熬拒?)
internalfuncinitWithClosure(closure:sendValueClosure?){
//將函數(shù)指針賦值給myClosure閉包粹懒,該閉包中涵蓋了someFunctionThatTakesAClosure函數(shù)中的局部變量等的引用
myClosure= closure
}
//4.在想調(diào)用的位置調(diào)用閉包
if(myClosure!=nil){//判定是否為空
//閉包隱式調(diào)用someFunctionThatTakesAClosure函數(shù):回調(diào)。
myClosure!(string:"~~~~~")
}
//5.使用類設(shè)定閉包方法
/*!
事先設(shè)定的閉包相應(yīng)方法
*/
funcsomeFunctionThatTakesAClosure(string:String) ->Void{
// function body goes here
}
//6.用閉包的init將閉包方法傳遞給剛剛的閉包
cell.initWithClosure(someFunctionThatTakesAClosure)//傳遞方法(ps:我的例子是cell和tableview)
總結(jié):感覺和block塊是一個(gè)道理,只是使用的時(shí)候把那個(gè)方法拿出來了
周末:
大體上分為兩種情況:
一是捕捉系統(tǒng)的已有方法的異常
第一種比較簡單以為是系統(tǒng)方法我們不知道異常是什么
do{
try<#系統(tǒng)的方法#> ? ?//會有異常的方法(ps:方法名字后面帶有throws)
}catch{
print(MyError.NoCopy) ? ? //我們可以在這里做相應(yīng)的處理
}
二是自己自定義的方法,跪者,自己寫的異常
上面那種是處理系統(tǒng)異常我們不知道異常具體是什么,熄求,但是我們的方法我們就會知道異常是什么了渣玲,因此我們要定義一個(gè)異常的集合體來存放我們會出現(xiàn)的異常
enumMyError:ErrorType{
caseError1
}
定義有異常的方法時(shí)要在方法的return前加上throws
例如:funcmayHaveErrorMethod()throws->Void{
}
然后在會異常的地方拋出異常
例如:funcmayHaveErrorMethod(number:Int)throws->Void{
lettmpNumber =6
guardtmpNumber < numberelse{//很顯然這是錯(cuò)的這個(gè)時(shí)候我們就可以拋出異常了(當(dāng)然真正的情況不會這么無聊)
throwMyError.Error1
}
}
在使用這個(gè)方法的時(shí)候就可以根據(jù)拋出的異常來判斷我們應(yīng)該做什么操作了 do try catch
do{
tryself.mayHaveErrorMethod(5) ? ? //用try后面接使用方法
}catch(MyError.Error1){ ? ? ? ? ? ? ?//判斷拋出的異常
print("錯(cuò)誤")
}catch{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//除了我們寫的其他情況
}