• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift开发第五篇——四个知识点(StructMutable方法&Tuple&autoclosure&Op ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本篇分三部分:

一、Struct Mutable方法

二、多元组(Tuple) 的使用

三、autoclosure 的使用

四、Optional Chain 的使用

 


 

一、Struct Mutable方法

直接上代码:

struct User {
    var weight: Int
    var height: Int
    
    // 这里会报错 Left side of mutating operator isn't mutable:'self' is immutable
    // 因为 Struct 出来的变量是 immutable 的,想要用一个方法去改变变量里面的值的时候必须要加上一个关键字 mutating
    mutating func gainWeight(newWeight: Int) {
        weight += newWeight
    }
}
var newUser = User(weight: 117, height: 178)
newUser.gainWeight(10)

运行结果: 

 


二、多元组(Tuple)

  多元组是 Swift 的新特性,普通程序员都是定义一个临时变量来保存需要交换的值得,现在我们可以不使用额外空间而使用多元组特性直接交换 a 和 b 的值

func swapMe<T>(inout a: T, inout b: T) {
    (a, b) = (b, a)
}
var a = 5, b = 6
swapMe(&a, b: &b)
print(a, b)  // 输出结果为6 5

 


三、autoclosure的 基本使用

// 在不使用autoclosure的情况下
func logIfTrue(predicate: () -> Bool) {
    if predicate() {
        print("True")
    }
}
// 第一种调用方式
logIfTrue { () -> Bool in
    return true
}
// 第二种调用方式
logIfTrue({return 2 > 1})
// 第三种调用方式
logIfTrue({2 > 1})
// 第四种调用方式
logIfTrue{2 > 1}

// 使用autoclosure
func logIfTrue(@autoclosure predicate: () -> Bool) {
    if predicate() {
        print("True")
    } else {
        print("False")
    }
}
// 调用方式
logIfTrue(2 > 1)
logIfTrue(1 > 2)

 


四、Optional Chain 的使用

class Toy {
    let name: String
    init(name: String) {
        self.name = name
    }
}

class Pet {
    var toy: Toy?
}

class Child {
    var pet: Pet?
}

let toy: Toy = Toy(name: "")
let pet: Pet = Pet()
let xiaoming: Child = Child()

  在这里最后访问的是 name,并且在 Toy 的定义中 name 是被定义为一个确定的 String 而非 String? 的,但是我们拿到的 toyName 其实还是一个 String?的类型。这是由于在 Optional Chaining 中我们在任意一个 ? 的时候都可能遇到 nil 而提前返回,这个时候当然就只能拿到 nil 了

let toyName = xiaoming.pet?.toy?.name
// 所以在实际开发中,我们通常使用 Optional Binding 来直接取值:
if let toyName = xiaoming.pet?.toy?.name {
    // 这时toyName 就是 String 而非 String? 了
}

extension Toy {
    func play() {
        print("玩玩具~~")
    }
}

let playClosure = {(child: Child) -> () in
    child.pet?.toy?.play()
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift 3 中的函数参数命名规范指北发布时间:2022-07-13
下一篇:
Swift-EasingAnimation绘制圆环动画发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap