关闭

Swift教程之可选类型【问号的用法】

标签: 对象问号的用法Swiftobjective-c
350人阅读 评论(0) 收藏 举报
分类:
//MARK:-----------可选类型?的用法------------
/*
-------------------------------------------------------------
可选类型(变量名: 类型?)
这个值要么存在,并且等于x,要么根本不存在。
可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,指对象不存在,而Swift 的 nil 不是指针,它代表特定类型的值不存在。任何类型的可选类型都能赋值为 nil,而不仅限于对象类型。并且更安全。
*/
let num = "123"

//由于toInt方法可能会失败,因此它会返回一个可选的Int类型,而不同于Int类型。一个可选的Int类型被记为Int?,不是Int。问号表明它的值是可选的,可能返回的是一个Int,或者返回的值不存在。
let convertedNumber:Int? = Int(num)// convertedNumber is inferred to be of type "Int?", or "optional Int"

var serverResponseCode: Int? = 404  //要么存在,且值为404
serverResponseCode = nil            //要么不存在。要将可选变量设为值不存在的状态,可以给它赋特殊值 nil


/*nil 不能用于非可选量。
如果代码中的常量或变量需要适配值不存在的特殊情况,务必将它声明为恰当的可选类型。
如果定义的可选量时不提供默认值,该常量或变量将自动设为 nil
*/
//var strValue = nil  //错误
var strValue : String?


//判断一个Optional的值是否有值,可以用if来判断
if (strValue != nil)
{
    //do sth with strValue
}

/* 使用Optional值
在使用Optional值的时候需要在具体的操作,比如调用方法、属性、下标索引等前面需要加上一个?
问号的意思是询问是否响应后面这个方法,和原来的isResponseToSelector有些类似
*/
let hashValue = strValue?.hashValue     //strValue是Optional的字符串,如果strValue是nil,则hashValue也为nil,如果strValue不为nil,hashValue就是strValue字符串的哈希值
//let hashValue = strValue.hashValue      //错误。对于Optional值,不能直接进行操作
print("hashValue is \(hashValue)")

/*总结 ? 使用场景
声明Optional值变量
用在对Optional值操作中,用来判断是否能响应后面的操作[判断是否是nil的三元运算符]
*/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:273881次
    • 积分:7264
    • 等级:
    • 排名:第3058名
    • 原创:471篇
    • 转载:68篇
    • 译文:2篇
    • 评论:27条
    最新评论