加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift的函数与函数指针、闭包Closure等相关内容介绍

发布时间:2020-12-14 02:09:26 所属栏目:百科 来源:网络整理
导读:span style="font-size:24px;"//函数//demo1 无参数类型func testConcat(){ println("测试函数");}testConcat()//调用demo1//demo2 多参数,一个返回值/* 函数以func开头,表示一个函数 v1表示参数,String参数类型 -返回值类型String*/func testConcats(v1:
<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)");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读