swift中的?和!

在swift开发中一些人可能会纠结 变量后跟“ ?”还是“ !”呢。那么今天这篇文章就带你一探究竟!OK,Let's Go!

其实很简单:

     ? 表示变量可以为 nil
     ! 表示变量一定不为nil

1.可选型Optional
swift设计师认为我们不应该用同样一种类型中的某个特殊的值来代表没有这个概念,比如说我们不应该用Int中的0来代表没有,而应该用一个统一的值nil来代表没有。nil是一个单独的类型,不是0,不是一个字符串。nil这种类型一定要和其他类型共存。

可选型一般用var变量来修饰,例如var imOptional: String? = "hello" , 如图所示:


屏幕快照 2016-09-14 下午11.55.55.png

2.可选型的解包
可选型是不能直接使用,因为可选型可能为空。

 (1)需要解包
 if let errorCode = errorCode {
"The errorCode is " + errorCode
}
(2)一次性解包多个变量
 if let errorCode = errorCode,errorMsg = errorMsg{
"The errorCode" + errorCode + "The errMsg is" + errorMsg
}
(3)加入条件筛选
  if let errorCode = errorCode,errorMsg = errorMsg where errorCode == "404"{
  "The errorCode" + errorCode + "The errMsg is" + errorMsg
 }

3.Optional Channel

errorMsg?.uppercaseString 的意思是对errorMsg解包,如果errorMsg不为nil则执行语句,逻辑上等于上述if语句
errorMsg!.uppercaseString 与errorMsg?.uppercaseString是完全不同的意思。在这里非常确定errorMsg不为nil,但是如果errorMsg为nil,程序就会崩溃

4.nil coalesce

对于 var errorMsg: String? = nil 下面3钟方法逻辑是一样的
//1
let message: String
if let errorMsg = errorMsg {
message = errorMsg
}else {
message = "NO error"
}
//2
let message2 = errorMsg == nil ? "NO error" :    errorMsg
//3
let message3 = errorMsg ?? "NO Error"

总结:希望对大家 理解Swift中的 ?和 !有所帮助

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • swift中?和!的出现,归根结底的原因,我认为是swift在设计时引入的一个重要概念,就是所有的变量必须初始化,...
    灰豹儿阅读 2,096评论 0 2
  • 转载自:http://segmentfault.com/a/1190000000533936一般我们在一下两种情况...
    若水V_V阅读 326评论 0 1
  • 举个例子吧: 问题: 在实际用Swift写CocoaTouch时,发现下面这样写才可以通过编译 var amite...
    Roger1219阅读 5,868评论 5 8
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,292评论 3 25
  • 前言 Swift是一门新的适用于iOS,macOS,watchOS,tvOS开发的编程语言。尽管如此,Swift的...
    BoomLee阅读 1,778评论 0 4