swift中为什么要创造出可选型?
(1)因为nil这个东西,swift中没有就是没有。 Int? 叫 整型可选型,如果不提前声明,直接赋值变量 nil会报错 。
可以将Int赋值给Int? ,但是不能将Int?赋值给Int
。
(2)不能将 普通 String 和可选型直接一起混用,必须 Unwrap
。也就是这样 在某个可选型变量后面加个!
表示担保它一定不为nil 。这个 叫 强制解包 , 是有风险的。
(3)swift提供了一种语法用来解包 ,let 也可以用var
if let errorCode = errorCode {
仅在这里面可以使用解包后的errorCode ,此时不需要加!
但是出了花括号
,errorCode又是可选型了。这是因为swift是严格的类型语言。
}
if let 这里可以用逗号隔开,对多个可选型进行解包 ,这里还可以用where关键字判断是否为某个值{
}
(4)隐式解析可选:
非Optional的变量必须在声明时或者构造器中进行初始化,但是如果想在viewDidLoad中初始化,所以只能声明Optional:var myLabel: UILabel? ,虽然我们确定在viewDidLoad 中初始化,并且在ViewController的生命周期内不会置为nil, 但是对myLabel操作时,每次依然要加上!来强制拆包
myLabel!.text = "text"
myLabel!.frame = CGRectMake(0,0,10,10)
对于这种类型的值,我们可以直接这么声明 var myLabel: UILabel!,这种是特殊的Optional,称为Implicitly Unwrapped Optionals, 直译就是隐式拆包的Optional,就等于说你每次对这种类型的值操作时,都会自动在操作前补上一个!进行拆包
(5)Swift 的nil和 Objective-C 中的nil并不一样。在 Objective-C 中,nil是一个指向不存在对象的指针。在 Swift 中,nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选都可以被设置为nil,不只是对象类型。
最新文章
- struts2回显指定的错误信息
- Gym 100500B
- iOS多线程邂逅
- ansible 的组件inventory
- Linux/Unix System Level Attack、Privilege Escalation(undone)
- 安装memcached服务器和PHP中添加memcache拓展模块
- Linux 硬盘分区
- vi--文本编辑常用快捷键之复制-粘贴-替换-删除
- Kth Ancestor 第k个祖先问题
- mysql grant 示例
- log4jdbc与logback集合打印日志过多的解决
- python3.4 伪装成浏览器获取页面信息失败
- Android高斯模糊
- PRINCE2的好处是什么?使用PRINCE2受益非浅
- Go - method
- 《java入门第一季》之泛型方法和泛型接口
- 获取input Date日期 时间,并得到前一天的Date值
- AES CBC PKCS7 C# C++
- React项目中使用HighCharts
- edis配置文件-转
热门文章
- Vue实现音乐播放器(六):jsonp的应用+抓取轮播图数据
- MongoDB 基本命令备忘
- Selenium WebDriver 数据驱动测试框架
- <;每日一题>; Day1:CodeForces.1140D.MinimumTriangulation(思维题)
- ajax传文件用express的multer接住
- WOJ#3882 旅行问题(POI2004)
- jenkins使用记录转自https://my.oschina.net/sanpeterguo/blog/197931
- sql server 中 like 中文不匹配问题
- TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
- Dorado环境启动出错Spring加载不到资源Bean配置 at org.springframework.asm.ClassReader.<;init>;(Unknown Source)