我的关注 |
¥0 swift语言中!和?有什么区别?有什么作用?
0

请问swift语言中!和?有什么区别?有什么作用?

hong
修改
评论(0)
1个回答
0
采纳

swift中的所有类型都是确定的,int就是int,string就是string。和其他语言不同,你不能将string\int等等类型的值赋值nil。(nil类似于其他语言中的null,代表空。)
举个例子,在java中:

  1. String str="hello word";
  2. str=null;//在swift里这里是错误的。

这样是合法的。但是在swift里,第二句是非法的。
这样,如果变量可能为空怎么办?如何给变量赋值空?

那就是 ‘?’

在swift中:

  1. var a:Int=1
  2. print(a) //合法:输出1
  3. a=nil //非法,输出:error: nil cannot be assigned to type 'Int'

上面第3句是非法的,为了合法,你可以这样写

  1. var a:Int?=1
  2. print(a) //输出:Optional(1)
  3. a=nil //合法
请注意第1句中的’?’ 和 第二句的输出

如果给第一句Int加上?号,a=nil就合法了,但是 print(a)为什么不是 1呢?
你可以理解 var a:Int?a定义成一个 ‘包’(我也不知道怎么描述),这个‘包’里有1这个值,你不能直接读取‘包’,那如何读取‘包’里的值呢?拆包!

用‘!’来拆包。这是‘!’的第一个用法。

例如上面的例子可以改为:

  1. var a:Int?=1
  2. print(a!) //输出:1
  3. a=nil //合法
要注意 ‘a!’ 同时也表示a 一定不会为nil,如果为nil编译器会报错。

var a:Int!是这么意思呢?
这代表 a一定不会为nil,如果你a=nil编译会报错。
同时对于var a:Int!的变量,你可以直接获取它的值,不需要拆包。
例如

  1. var a:Int!=1
  2. print(a) //输出:1
采纳答案
佛法不二
修改
评论 (0)
撰写回答