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

Swift为了确保类型和数据安全,引入了可选值(Optional Type),允许变量在初始化时不必立即赋值。可选值用类型后加问号表示,初始值为`nil`。常量不能定义为可选值。可选值可以相互赋值,但不同类型的可选值之间需要强制解析转换。隐式可选类型通过感叹号表示,无需每次使用时强制解析,但使用前仍需确保其非`nil`,以避免运行时错误。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值