¥0
swift语言中!和?有什么区别?有什么作用?
1个回答
0
采纳
swift中的所有类型都是确定的,int就是int,string就是string。和其他语言不同,你不能将string\int等等类型的值赋值nil
。(nil类似于其他语言中的null
,代表空。)
举个例子,在java中:
String str="hello word";
str=null;//在swift里这里是错误的。
这样是合法的。但是在swift里,第二句是非法的。
这样,如果变量可能为空怎么办?如何给变量赋值空?
那就是 ‘?’
在swift中:
var a:Int=1
print(a) //合法:输出1
a=nil //非法,输出:error: nil cannot be assigned to type 'Int'
上面第3句是非法的,为了合法,你可以这样写
var a:Int?=1
print(a) //输出:Optional(1)
a=nil //合法
请注意第1句中的’?’ 和 第二句的输出
如果给第一句Int加上?号,a=nil
就合法了,但是 print(a)
为什么不是 1
呢?
你可以理解 var a:Int?
将a
定义成一个 ‘包’(我也不知道怎么描述),这个‘包’里有1
这个值,你不能直接读取‘包’,那如何读取‘包’里的值呢?拆包!
用‘!’来拆包。这是‘!’的第一个用法。
例如上面的例子可以改为:
var a:Int?=1
print(a!) //输出:1
a=nil //合法
要注意 ‘a!’ 同时也表示a 一定不会为nil,如果为nil编译器会报错。
而var a:Int!
是这么意思呢?
这代表 a一定不会为nil,如果你a=nil
编译会报错。
同时对于var a:Int!
的变量,你可以直接获取它的值,不需要拆包。
例如
var a:Int!=1
print(a) //输出:1
撰写回答