为什么我可以在整数协议中存储和检索数字?

时间:2014-06-09 17:24:16

标签: swift

我看到有些人在Swift中Integer(一种协议)和Int(一种类型)之间感到困惑。我想我理解它们之间的区别,我知道为什么你不能将Integer加在一起 ​​- 添加两个协议是没有意义的。

但是,我想知道为什么会这样做:

var x:Integer = 3
println(x) // Prints 3

如果Integer只是一个协议,它怎么能存储和检索整数值? (如果它没有没有工作,那么它会不会导致Swift初学者之间的混淆减少?)

3 个答案:

答案 0 :(得分:2)

任何变量都可以使用protocol作为其类型,如果您需要的是符合该协议的内容。

因此,您正在分配的int值3被放入一个变量中,其中只有Integer协议中指定的东西(方法,运算符,属性等)可用。< / p>

这对于代表那些你并不真正关心对象的具体类型的东西很有用,只要它支持你需要的功能(如你的协议中所指定的)

"Protocols as Types" section (Protocols chapter) of the swift book

对此进行了深入介绍

答案 1 :(得分:0)

由于3是Int,并且Int实现了Integer协议,因此var x可以很好地引用实例3

答案 2 :(得分:0)

  1> var x:Integer = 3
x: Int = <read memory from 0x7fd3dc465760 failed (0 of 8 bytes read)>
  2> var y:Int = 3
y: Int = 3

这不是一回事。但是,由于Int实现了Integer,因此在某些情况下(例如println)使用时,您可能会得到有意义的结果。不过不要依赖它!