<span style="font-size:24px;">//函数 //demo1 无参数类型 func testConcat(){ println("测试函数"); } testConcat()//调用demo1 //demo2 多参数,一个返回值 /* 函数以func开头,表示一个函数 v1表示参数,String参数类型 ->返回值类型String */ func testConcats(v1:String,v2:String) ->String{ return "\(v1) and \(v2)"; } //函数参数含有标签 func testConcatAndMark(v1:String,AndValue v2:String,AndNumber v3:String)->String{ return "\(v1),\(v2),\(v3)" } //测试函数 func testFunction(){ let v = testConcats("hello", "world"); println(v); let v2 = testConcatAndMark("david", AndValue: "dream", AndNumber: "good"); println(v2) } testFunction(); //函数返回多值 func getInfo()->(String,String,Int){ return ("david","dream",100); } let (v1,v2,v3)=getInfo(); println("v1=\(v1),v2=\(v2),v3=\(v3)"); //函数嵌套函数 func testFunctionInFunction()->Int{ var y = 10; func add(){ y+=5; } add(); return y; } let v6 = testFunctionInFunction(); //******************************* //函数指针 *****五星难度 /* 返回值是(Int->Int),是个函数地址 第一个int是参数类型,第二个int是返回值 */ func getFuncPointer()->(Int->Int) { func addOne(num:Int)->Int{ return num+1; } return addOne;//返回一个函数 地址 } var funPointer = getFuncPointer(); //funPointer是个函数指针 var v7 = funPointer(100);//函数的形式调用 func get()->(Int->String){ func post(count:Int)->String{ if count>50{ return "success"; }else{ return "failed" } } return post; } let v8 = get();//v8拿到的是get()函数的地址 let v9 = v8(58);//v9拿到的是get函数的返回值 //函数指针/地址作为参数,函数作为参数传给函数,函数的传递</span>
<span style="font-size:24px;"> </span>
<span style="font-size:24px;">//闭包是难点,闭包的作用主要是函数与函数之间的沟通,有点像Block</span>
<span style="font-size:24px;"></span><pre name="code" class="objc">//(num:Int)->Bool闭包参数类型 func hasColsureMatch(arr:Int[],value:Int,cb:(num:Int)->Bool){ for item in arr{ if cb(item){ return true; } } return false; } var ar = [20,9.100,34,89,39]; var v1 = hasClosureMatch(arr,40,{ (num:Int) -> Bool in return num >= 40; }); println("v1 is \(v1)");