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

Swift 基本语法02-"let"和"var"

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

一个iOS开发初级菜鸡.png

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

1.let(常量)和var(变量)可选项的默认值
1.1 let(常量)的可选项没有默认值

1> 常量在使用之前要被初始化

代码语言:javascript
复制
let y: Int?
// Constant 'y' used before being initialized
print(y)

2> 给常量设置数值,初始化的工作只能做一次

代码语言:javascript
复制
let y: Int?
y = 20
// Immutable value 'y' may only be initialized once
// y = 30   不能继续修改(因为只能修改一次)
print(y)
1.2 var(变量)的可选项的默认值为nil

1> 如果变量的值没有改变,只会警告我们把var改变为let

代码语言:javascript
复制
// Variable 'x' was never mutated; consider changing to 'let' constant
var x: Int?
print(x)

2> 给变量赋值,值可以随意改变

代码语言:javascript
复制
// Variable 'x' was never mutated; consider changing to 'let' constant
var x: Int?
x = 10  // Optional(10)
x = 100 // Optional(100)
print(x)
2. 简单的分支和三目的写法
2.1 分支
代码语言:javascript
复制
/**
 * 1.条件不需要括号'()'了
 * 2.语句必须有括号'()'(else{ },OC类似的可以这样写->if x > 5 print("大于5"))
 */
let x = 10
if x > 5 {
    print("大于5")    // 大于5
} else {
    perror("小于5")   // ViewController.swift:31:13: Will never be executed
}
2.2 三目
代码语言:javascript
复制
let x = 10

x > 5 ? print("大于5") : print("小于5") // 大于5
x > 5 ? print("大于5") : ()            // '()'表示空执行(什么也不执行)
3. 问号操作符号
3.1 可选项的判断

1> 如果指定类型是可选的,那么可选项在参与运算时,必须要进行强行解包才能参与运算

代码语言:javascript
复制
let x: Int? = 10
let y: Int? = 100

// ViewController.swift:24:19: Value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
// print(x + y) // 因为'x'和'y'都是可选的,可选项参与计算时,必须进行解包后才能参与计算
print(x! + y!)  // 110

2> 可选项作为参数传递时需要注意的

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    // 因为'x'和'y'都是可选的,因此这里'y'可以传`nil`
    demo(x: 10, y: nil)
}

func demo(x: Int?, y: Int?) {

    // 程序会报错,崩溃到此行
    print(x! + y!)  // fatal error: unexpectedly found nil while unwrapping an Optional value
}

3> 简单的三目??

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    // 因为'x'和'y'都是可选的,因此这里'y'可以传`nil`
    demo(x: 10, y: nil)
}

func demo(x: Int?, y: Int?) {

    /**
     * '??'是一个简单的三目运算符
     * 如果有值,使用值
     * 如果没有值,使用'??'后面的值代替
     */
    print((x ?? 0) + (y ?? 0))  // 10
}

4> 关于??的优先级

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    let name: String? = "老王"
    print((name ?? "") + "你好")  // 老王你好
    
    let name: String? = nil
    print((name ?? "") + "你好")  // 你好
    
    /**
     * 由此可见`??`的优先级最低
     * 如果'name'有值,最后执行'??'运算符,因此输出结果为"老王"
     * 使用的时候,建议用'( )'将'??'运算符相关的包装起来,防止出错
     */
    let name: String? = "老王"
    print(name ?? "" + "你好")    // 老王
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.05.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.let(常量)和var(变量)可选项的默认值
    • 1.1 let(常量)的可选项没有默认值
      • 1.2 var(变量)的可选项的默认值为nil
      • 2. 简单的分支和三目的写法
        • 2.1 分支
          • 2.2 三目
          • 3. 问号操作符号
            • 3.1 可选项的判断
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档