我看到有些人在Swift中Integer
(一种协议)和Int
(一种类型)之间感到困惑。我想我理解它们之间的区别,我知道为什么你不能将Integer
加在一起 - 添加两个协议是没有意义的。
但是,我想知道为什么会这样做:
var x:Integer = 3
println(x) // Prints 3
如果Integer
只是一个协议,它怎么能存储和检索整数值? (如果它没有没有工作,那么它会不会导致Swift初学者之间的混淆减少?)
答案 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
)使用时,您可能会得到有意义的结果。不过不要依赖它!