iOS 开发 -- Swift 语法篇 (二) 可选项
来源:互联网 发布:淘宝冰箱便宜 编辑:程序博客网 时间:2024/06/09 16:08
Optional
是 Swift 的一大特色,也是 Swift 初学者最容易困惑的问题- 定义变量时,如果指定是
可选的
,表示该变量可以有一个指定类型的值,也可以是 nil
- 定义变量时,在类型后面添加一个
?
,表示该变量是可选的 - 变量可选项的默认值是
nil
- 常量可选项没有默认值,主要用于在构造函数中给常量设置初始数值
// Optional 可能有两个值 (None / Some)// 格式(1. 自动推导):var 变量名: Optional = 值let x: Optional = 20// 格式(2. 指定类型):var 变量let y: Optional<Int> = 30// 格式(3. 简化格式):var 变量名: 类型? = 值let z: Int? = 10// 可选值在参与计算前,必须`解包 unwarping`// 只有`解包(unwrap)`后才能参与计算// 在变量后添加一个 `!`,可以强行解包// `?` 是用于定义的// `!` 是用于解包的,程序员要对每一个 `!` 负责print(x! + y! + z!)
- 如果 Optional 值是
nil
,不允许参与计算 - 只有
解包(unwrap)
后才能参与计算 - 在变量后添加一个
!
,可以强行解包
注意:必须要确保解包后的值不是 nil,否则会报错
// 常量可选项必须要设置初始值let x: Int? //= 20x = 20// 变量可选项默认值是 nilvar y: Int? //= 10y = 20// unexpectedly found nil while unwrapping an Optional value// 在对可选项解包时发现 nil,会报错!if y == nil { print("y值为 nil")} else { print(x! + y!)}
常见错误
unexpectedly found nil while unwrapping an Optional value
翻译
在对可选项[解包]时发现 nil
??
运算符
??
运算符可以用于判断变量/常量
的数值是否是nil
,如果是则使用后面的值替代- 在使用 Swift 开发时,
??
能够简化代码的编写
// 常量可选项必须要设置初始值var x: Int? //= 20// x = 30// 变量可选项默认值是 nilvar y: Int? //= 10y = 20print((x ?? 0) + (y ?? 0))
注意:
??
的优先级低,在使用时,应该注意使用()
var str: String? = "老王"// 注意 `??` 的优先级低,在使用时,应该注意使用 `()`print((str ?? "无名") + " 你好")print(str ?? "无名" + " 你好")
0 0
- iOS 开发 -- Swift 语法篇 (二) 可选项
- iOS 开发 -- Swift 语法篇 (四) 循环
- iOS 开发 -- Swift 语法篇 (五) 字符串
- iOS 开发 -- Swift 语法篇 (六) 集合
- iOS开发——swift篇&经典语法(二十)高级运算符
- 004--swift基础语法(Optional 可选项)
- iOS开发 ---- Swift基础语法。
- swift 可选项 "?" 和 "!"
- iOS 开发 -- Swift 语法篇 (一) 常量和变量
- iOS 开发 -- Swift 语法篇 (三) 控制流
- IOS开发:swift 语言基本语法1
- iOS开发笔记- Swift基本语法
- iOS开发之Swift基本语法详解
- iOS开发swift语法初级篇—————(swift技术交流群:361513739)
- 2、swift开发iOS——swift语法
- Swift基础1.2——基本语法—Optional 可选项
- iOS开发Swift篇—(二)变量和常量
- swift 可选项和隐式展开可选项
- RFC6552中文版: Objective Function Zero for RPL
- jni 线程函数调用技巧-native thread exited without detaching
- 浏览器加载和渲染html的顺序
- 设计模式之个人通俗理解
- QT5生成的exe自动拷贝依赖的dll并打包的方法
- iOS 开发 -- Swift 语法篇 (二) 可选项
- Docker部署JavaWeb项目实战
- GDB中应该知道的几个调试方法
- OC学习记录160223
- TCP和UDP总结
- x86程序的运行过程
- python之文件编码转换
- 在 Vine 产品开发和团队管理上,我这两年经验谈
- 并行计算之路<6>——CUDA的软件架构