周六部分
//1.创建一个闭包
typealiassendValueClosure=(string:String)->Void//类似于OC中的typedefsendValueClosure名字string参数Void返回值
//2.声明一个闭包属性
varmyClosure:sendValueClosure?
//3.创建闭包属性的init方法(ps:是否能不写???)
internalfuncinitWithClosure(closure:sendValueClosure?){
//将函数指针赋值给myClosure闭包,该闭包中涵盖了someFunctionThatTakesAClosure函数中的局部变量等的引用
myClosure= closure
}
//4.在想调用的位置调用闭包
if(myClosure!=nil){//判定是否为空
//闭包隐式调用someFunctionThatTakesAClosure函数:回调。
myClosure!(string:"~~~~~")
}
//5.使用类设定闭包方法
/*!
事先设定的闭包相应方法
*/
funcsomeFunctionThatTakesAClosure(string:String) ->Void{
// function body goes here
}
//6.用闭包的init将闭包方法传递给刚刚的闭包
cell.initWithClosure(someFunctionThatTakesAClosure)//传递方法(ps:我的例子是cell和tableview)
总结:感觉和block块是一个道理,只是使用的时候把那个方法拿出来了
周末:
大体上分为两种情况:
一是捕捉系统的已有方法的异常
第一种比较简单以为是系统方法我们不知道异常是什么
do{
try<#系统的方法#> //会有异常的方法(ps:方法名字后面带有throws)
}catch{
print(MyError.NoCopy) //我们可以在这里做相应的处理
}
二是自己自定义的方法,,自己写的异常
上面那种是处理系统异常我们不知道异常具体是什么,,但是我们的方法我们就会知道异常是什么了,因此我们要定义一个异常的集合体来存放我们会出现的异常
enumMyError:ErrorType{
caseError1
}
定义有异常的方法时要在方法的return前加上throws
例如:funcmayHaveErrorMethod()throws->Void{
}
然后在会异常的地方抛出异常
例如:funcmayHaveErrorMethod(number:Int)throws->Void{
lettmpNumber =6
guardtmpNumber < numberelse{//很显然这是错的这个时候我们就可以抛出异常了(当然真正的情况不会这么无聊)
throwMyError.Error1
}
}
在使用这个方法的时候就可以根据抛出的异常来判断我们应该做什么操作了 do try catch
do{
tryself.mayHaveErrorMethod(5) //用try后面接使用方法
}catch(MyError.Error1){ //判断抛出的异常
print("错误")
}catch{ //除了我们写的其他情况
}