swift交流群:342581988,欢迎加入!
这两天看了看这个文档,基本上好像这两个符号很是让人不爽,决定一探究竟,把最新心得记录与此。
首先就是这个叫optionals的东西,查了字典,暂且叫可选值吧,官方文档说,它这是一个值,并且它等于一个x,或者它什么也不是,
其实说就是它要么有一个值,要么什么也没有,而且这个值也是有规定的,后面说。
下面把官方例子说一下
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
很明显,这是一个string to int的转换,而且肯定也是没问题的,这个事能成功的,但是我们考虑另外一种情况
let possibleNumber = "Hello World"
let convertedNumber = possibleNumber.toInt()
这个也很明显,是不可能成功转换的。这个时候,“?”就出现了,也就是当我们不能十分确定这个值一定会有一个有效值得时候我们就应该在变量名后面加一个?,也就是Int?了,当我们把变量声明为Int?的时候,其实也就是说这个变量要么是Int类型,要么就什么也没有,不可能是其他的值,比如说Bool或者String类型就全部排除了。
下面在说说这个“!”符号,当一个optionals类型的变量被你确定里面是有值得时候,比如说,let a : int? = 9那么我们要用这个a的时候,那就必须在后面加上“!”,比如打印println("\(a!)"),如果不加,那么你就只能干着急了可能。好吧,把官网例子抄一下吧。接着上面第一个例子来,
if convertNumber{
println("\(possibleNumber) has an integer value of \(convertNumber!)")
}else{
println("\(possibleNumber) could not be converted to an integer")
}
所以说,如果你对一个optionals值不确定的时候,不要乱用!,因为可能他真的没东西。 ,
后边还有个optional binding,我不知道怎么翻译就叫选择捆绑吧,希望纠正啊,
也就是和if条件表达捆绑使用,其实和上面差不多,只是在执行体中用了一个普通变量而已,
上代码
if let actualNumber = possibleNumber.toInt(){
println("\possibleNumber) has an integer value of \(actualNumber)")
}else{
println("\(possibleNumber) could not be convert to an integer")
}
这里actualNumber就不用加!了。
下面说说nil吧,
在Swift里面,不是任何 都能用nil的,只有声明为optional的才能等于nil,
var serverResponseCode : Int? = 404
serverResponseCode = nil
这里是没有问题的,但是一个非optional类型就不能直接赋值为nil,如果你真想,那就把他写成optional类型吧。
好吧,就写到这吧
特别备注:本文很有可能有很多错误请大家看出务必指出,好及时更正!包括翻译