前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 基本语法03-"if let"和"guard let"

Swift 基本语法03-"if let"和"guard let"

作者头像
用户1890628
发布2018-05-10 14:50:56
2.6K0
发布2018-05-10 14:50:56
举报
文章被收录于专栏:Objective-C

一个iOS开发初级菜鸡.png

Swift 基本语法01-Swift简介 Swift 基本语法02-"let"和"var" Swift 基本语法04-"switch"和"for" Swift 基本语法05-"String" Swift 基本语法06-数组和字典

1. if let用法

1.1 普通ifif let的比较 1> 如果常量是可选项(Optional),if判断后仍然需要解包(!

代码语言:javascript
复制
let name: String? = "老王"
let age: Int? = 10

if name != nil && age != nil {
    print(name! + String(age!))     // 输出:老王10
}

2> 如果常量是可选项(Optional),if let判断后不需要解包(!),{ }内一定有值

代码语言:javascript
复制
let name: String? = "老王"
let age: Int? = 10

// if let 连用,判断对象的值是否为'nil'
if let nameNew = name,
    let ageNew = age {
    
    // 进入分支后,nameNew 和 ageNew 一定有值
    print(nameNew + String(ageNew)) // 输出:老王10
}

Tips:nameNewageNew的作用域仅在{}

3> if var的用法,和if let的区别就是可以在{}内修改变量的值

代码语言:javascript
复制
let name: String? = "老王"
let age: Int? = 10

if var nameNew = name,
    let ageNew = age {
    // 'var'修饰,可以修改'nameNew'的值,'let'修改的不可以修改
    nameNew = "老李"
    print(nameNew + String(ageNew))     // 输出:老李10
}
2. guard let用法

1> guard letif let刚好相反,guard let守护一定有值。如果没有,直接返回。 2> 通常判断是否有值之后,会做具体的逻辑实现,通常代码多 3> 如果用 if let凭空多了一层分支,guard let是降低分支层次的办法 4> guard let语法是 Swift 2.0 推出的

代码语言:javascript
复制
let name: String? = "老王"
let age: Int? = 10

guard let nameNew = name,
    let ageNew = age else {
        
        print("姓名 或 年龄 为nil")
        return
}
// 代码执行至此, nameNew 和 ageNew 一定有值
print(nameNew + String(ageNew))     // 输出:老王10
3. if letguard let的命名技巧

技巧:取和参数名相同的变量名

1> guard let演示

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    demo(name: "老王", age: 11)
}

func demo(name: String?, age: Int?) {
    guard let name = name,
        let age = age else {
        print("姓名或年龄为nil")
        return
    }
    /**
     * 'name'至此会有两个
     * 1.String  name('guard let'守护,等号右边的'name')
     * 2.String? name('guard let'守护,等号右边的'name')
     * 3.这里正常应该选择不带'?'的'name',但是即便是选择了('Optional'的'name'),编译器也会帮你更正过来,这就是取名的技巧
     */
    print(name + String(age))   // 输出:老王11('name'和'age'为不带'Optional'的)
}

2> if let演示

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    demo(name: "老王", age: 11)
}

func demo(name: String?, age: Int?) {
    if let name = name,
        let age = age {
        /**
         * 'name'至此只会有两个
         * 1.String  name('if let'守护,等号右边的'name',仅在'{}'作用域内有效)
         * 2.String? name('if let'守护,等号右边的'name')
         * 3.这里正常应该选择不带'?'的'name',但是即便是选择了('Optional'的'name'),编译器也会帮你更正过来,这就是取名的技巧
         * 4.如果'name'或'age'中有一个为'nil',或者都为'nil',下面就不会输出
         */
        print(name + String(age))   // 输出:老王11('name'和'age'为不带'Optional'的)
    }
    /**
     * 'name'至此只会有一个
     * 2.String? name(demo(name: String?)中的'name')
     * 3.这里正常应该选择不带'?'的'name',但是即便是选择了('Optional'的'name'),编译器也会帮你更正过来,这就是取名的技巧
     */
    print("demo(name: String?)中的'name'")
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.05.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. if let用法
  • 2. guard let用法
  • 3. if let和guard let的命名技巧
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档