<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)");