微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift学习3 数据类型的可选值 optional type

swift不仅要求类型安全,还尽力保证数据安全,未赋值的变量不允许使用

那么如果一开始不想赋值,就需要可选值定义,在类型后加问号?

输出值为 nil,这里的nil与oc中的有所区别,但基本概念都是空值

但是注意,常量不能用可选值定义

可选值之间可以相互赋值

var optvar1 :Int?
print(optvar1)//nil

var optvar2 :Int? = 110
print(optvar2)//Optional(110)


optvar1 = optvar2
print(optvar1)//Optional(110)

不同的可选值之间不可以转换类型

var optvar1 :Int?

var optvar2 :UInt? = 110

optvar1 = Int?(optvar2) //cannot invoke initializer for type 'Int?' with an argument list of type '(UInt?)'

Int?向Int?赋值时,可以强制解析

optvar1 = optvar2!
print(optvar1)//Optional(110)

Int?向Int也可以赋值,同样强制解析

var a = optvar2!
print(a)//110

Int向Int?赋值,无需解析

optvar2 = a + 1
print(optvar2)//Optional(111)

当我想判断optional是否有值并赋值时,可以用判断

if var abc = optvar2 {
    print("abc");print(abc)
}//abc 111

var optvar3 : Int?
if var bcd = optvar3 {
    print(bcd)//无打印
}

if optvar2 == nil {
    print("nil")
}
else {
    print ("not nil")//not nil
}

隐式可选类型,是可选类型的一个补充,用法一样,?换为!

var oprVar4 : Int! = 8
var aaaa =  oprVar4
print(aaaa)//8

它不需要再强制解析

可选类型要注意安全问题,因为变量不赋值,也可以调用,但是运行时会报错

var oprVar4 : Int?
var aaaa =  oprVar4!
print(aaaa)//Fatal error: unexpectedly found nil while unwrapping an Optional value

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐