美文网首页
swift 3.0 闭包的使用和变形

swift 3.0 闭包的使用和变形

作者: 江南易飞 | 来源:发表于2016-12-01 16:29 被阅读109次

本篇我们主要学习闭包的定义与变形,只有知道它怎么变形和定义,才能真正
能够理解和灵活运用它

// 直接赋值属性,看看和闭包有何区别,看不出来吗,那就往下看吧
var str : String = "jack"

// 闭包可以这么定义
var str0 : String = {
   return "jack"
}()

// 可以省略 = 和 ()
var str1 : String{
    return "jack"
}

// 可以包含get方法
var str2 : String {
    get{
        return "jack"
    }
}

// 当然也可以包含 set 方法
var str3 : String {
    get{
        return "jack"
    }
    
    set{
        print("jack")
    }
}

// 那willSet 和 willGet 也可以咯
var str4 : String = "Bob" {
    willSet{
        print("Bob")
    }
    
    didSet{
        print("Bob")
    }
}

// 我们来看看闭包是如何演变的吧
// 闭包定义
//    {
//
//        (arguments) - > returnType in
//        code
//    }(arguments)
// 可以在闭包中定义参数,返回值。闭包后用括号执行,并在括号中可以传参, 例如
var s = {
    (arg1:String,arg2:String) -> String in
    return arg1 + arg2
}("Job","Bob")


// 基于上面最全的定义方式,我们可以省略参数类型:
var s2 = {
    
    arg1,arg2 -> String in
    return arg1 + arg2
    
}("Job","Bob")

// swift 的类型推到,根据后面括号的传参能自动判断参数的类型
// 那么我们是不是也可以省略 返回值类型,但是在声明时要确定
// eg:
var s3 : String = {
    arg1,arg2 in
    return arg1 + arg2
}("Job","Bob")


// 是不是很爽,其实还可以更爽
var s4 : String = {
    return $0 + $1
}("Job","Bob")

// 这样写return 是不是感觉没有作用,那就这样好了
var s5 : String = {
    $0 + $1
}("Job","Bob")

// 如果闭包没有参数呢,那还不简单
var s6 : String = {
    return "Job"
}()

// 什么,你说括号也没用,那干脆点好了
// tip: 没有() 也不需要 = 了
var s7 : String {
    return "JOB"
}


// 回头再看看上面声明的str 变量,是不是耳目一新了

相关文章

网友评论

      本文标题:swift 3.0 闭包的使用和变形

      本文链接:https://www.haomeiwen.com/subject/mpnxmttx.html