浅析swift optional
1.为什么使用optional
由于swift语言是类型安全的,即在初始化变量或常量时,不能将其赋值为nil,否则会报错:
var a = nil
然而,我们在定义变量时并不一定要初始化,函数的返回值并不一定有具体的值,这就为我们使用变量带了不便,故swift提供了optional,即可选类型,来缓解这个问题。
可选类型,顾名思义即使用该类型的声明的变量可以有值,亦可以没有值(nil)。
2.optional的使用
在swift中,在声明变量的类型后面加上?
即可申明可选类型:
var str: String? = "abc"
由于可选类型变量的值有可能为nil
,故不能直接使用,在swift中,主要有以下四种方式使用optional
:
optional拆包
var str: String? = "abc" print(str!.count) // 使用!进行拆包
optional隐式拆包
var str: String? = "abc" print(str!.count)
optional binding
var str: String? = "abc" if let realStr = atr {print(realStr.count) }
optional选择链
var str: String? = "abc" let count = str?.count // count仍是可选类型 // 对count使用拆包方式进行访问 if count != nil {let lastIndex = count! - 1print(lastIndex) }
3.optional原理浅析
optional并不是swift语言本身带有的特性,而是通过枚举实现的,下图是swift源码截图
我们可以通过如下方式定义可选类型,其效果完全等同于上述使用?
的方式
var str: Optional<String> = "abc"
if let realStr = str {print(realStr)
}
我们还可以使用Optional
泛型提供的unsafelyUnwrapped
方法进行解包:
var str: Optional<String> = "abc"
let count = str.unsafelyUnwrapped.count
print(count)
浅析swift optional相关推荐
- 优雅的剥洋葱:浅析 Java Optional 类
前言 杨宗纬唱过一首歌,叫做<洋葱>,里面有一句是:"如果你愿意一层一层一层的剥开我的心...",歌曲是非常的感人. 其实在咱们程序员日常开发中,也经常会遇见需要一层一 ...
- Swift的一些问题
一些Swift的问题列表: How to use a Objective-C #define from Swift How do I convert an NSDictionary to a Swif ...
- swift可选类型_Swift可选
swift可选类型 Swift Optional is a very important underlying concept in Swift programming. Optional is so ...
- swift 的init_Swift init()
swift 的init In this Swift tutorial, we'll be discussing an important concept, namely Swift init or S ...
- swift 可选链_Swift可选链
swift 可选链 Swift Optional Chaining is a very useful feature. Optionals are a type in Swift that wrap ...
- A站 的 Swift 实践 —— 上篇
背景介绍 AcFun俗称为"A站",作为一款二次元内容社区产品,以"认真你就输了"为文化导向,倡导轻松欢快的亚文化.AcFun涵盖了中长视频,小视频,番剧,文章 ...
- Swift 代码调试核武-LLDB调试基础
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow 前言:LLDB是个开源的调试器,与XCode绑定 ...
- 将指定页面横屏 landScape
碰到一个功能就是使指定的页面横屏,然后找了一些方法其中之一是两句代码:如下(不推荐,有的swift环境支持有的不支持) //MARK:将这个页面横屏的方法override func shouldAut ...
- lldb常用命令与调试技巧
一.基本介绍 LLDB是个开源的内置于XCode的调试工具,它能帮助我们在开发中更快的定位和调试bug,无论正向和逆向开发中都有很大的作用.lldb对于命令的简称,是头部匹配方式,只要不混淆(不提示歧 ...
最新文章
- beyond compare 4 的30天试用期已过-解决方法
- maven 加入第三方库_maven加载第三方jar不能加载
- 谷歌浏览器安装过程 0911
- java对多态的理解_对于Java中多态的理解
- Android批量图片加载经典系列——使用二级缓存、异步网络负载形象
- ffmpeg h264 解码 转
- VS Code 运行Vue项目
- oracle 检查链接数,oracle连接数检查
- 关于直播,所有的技术细节都在这里了(三)
- pip安装mysql驱动_windows环境下Python安装mysql驱动遇到“坎”
- 离散数学第九章—学习笔记
- 医疗信息管理系统(HIS)——>业务介绍
- 左手补贴右手社交 杀入直播红海的拼多多会有机会吗?
- 【观察】UCloud:决胜东南亚“正当时”,做出海企业“加速器”
- Python-字符串的判断、拆分和拼接
- python环境下数据操作_数据分析环境搭建和Python基础知识
- 【CodeChef】【DP】Count Subsequences
- Openxml读取和生成简单类型的Excel
- Secure CRT 7.0 通过 SSH服务登录 Vmware 下的Ubuntu 12.04服务器
- 【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变