zoukankan      html  css  js  c++  java
  • Swift的函数与函数指针、闭包Closure等相关内容介绍

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


    
    
  • 相关阅读:
    Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
    SVN使用教程总结
    实践SQLServer Tuning
    SQL性能优化:如何定位网络性能问题
    windows7下修改hosts文件无效解决办法
    jQuery Event.stopPropagation() 函数详解
    引用js或css后加?v= 版本号的用法
    JS实现点击跳转登陆邮箱
    DWZ (JUI) 教程 navTab 刷新分析
    CPU与内存的关系
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7387957.html
Copyright © 2011-2022 走看看