作者:fengsh998
转载请注明出处
假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我。谢谢。
在上一节中有些问题还没有弄清,在这里自己写了一下,做了一下验证,并希望能给读者有所帮助。
看样例:
样例中包含
callback函数的声明与使用
函数作为形參进行传递
函数作为返回值
函数支持泛型,当然class也支持。
import Foundation typealias Point = (Int, Int) let origin: Point = (0, 0) //初始化函数用 func willDoit(sender : CallBackManager) { println("willDoit defaulft.") } func didDoit(sender : CallBackManager) { println("didDoit defaulft.") } class CallBackManager { //声明两个函数变量 var willdoitcallback : (CallBackManager) -> () = willDoit var diddoitcallback : (CallBackManager) -> () = didDoit var callbackName = "hello world" init() { } func testCall() { self.willdoitcallback(self) callbackName = "reset data" println("to do something.") self.diddoitcallback(self) } //函数地址作为形參传递 func testparams(addfunc:(Int,Int)->(Int),instruction : String) ->Bool { println("3 + 5 = (addfunc(3,5)) , 第二个參数值为:(instruction)") return true } //函数作为返回值 func testfunctionReturn(instruction : String) -> (Int,Int) -> Int { func Multiplication(a:Int,b:Int) ->Int { return a * b } return Multiplication } //自己主动闭包类型 //调用simpleAssert(testNumber % 2 == 0, "testNumber isn't an even number.") func simpleAssert(condition: @auto_closure () -> Bool, message: String) { if !condition() { println(message) } } //可变參数 func unknowParam(slist : String...) { var ret : String = "" for usb in slist { println(usb) ret += (usb + ",") } } //使用泛型 //simpleMin(17, 42) //整型參数 //simpleMin(3.14159, 2.71828) //浮点型 func simpleMin<T: Comparable>(x: T, y: T) -> T { if x < y { return y } return x } }
调用:
class ViewController: UIViewController { func willcallback(callback : CallBackManager) { println("回调前结果(callback.callbackName)") } func didcallback(callback : CallBackManager) { println("回调后结果(callback.callbackName)") } func add(a:Int,b:Int) -> Int { return a + b } override func viewDidLoad() { super.viewDidLoad() var test = CallBackManager() test.willdoitcallback = willcallback test.diddoitcallback = didcallback test.testCall() test.testparams(add,instruction: "測试函数作为传參") let funcMulti = test.testfunctionReturn("返回函数地址") let ret = funcMulti(5,5) println("5 * 5 = (ret)") return;} }