swift中的?和!
2016-09-15 本文已影响511人
渣渣程序猿爱次次大餐
在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中的 ?和 !有所帮助