use*_*499 3 protocols ios swift
摘自iOs 10编程基础知识:
"因为Nest采用了ExpressibleByIntegerLiteral,我们可以传递一个需要嵌套的Int,我们的init(integerLiteral :)将被称为AUTOMATICALLY ....."
struct Nest : ExpressibleByIntegerLiteral {
var eggCount : Int = 0
init() {}
init(integerLiteral val: Int) {
self.eggCount = val
}
}
Run Code Online (Sandbox Code Playgroud)
好吧所以我的问题是这个......它是如何被自动调用的?当我试图找出原因时,我的逻辑陷入了困境.从我看到的,你可以说:
var eggie : Nest = 5
Run Code Online (Sandbox Code Playgroud)
但是......好吧,等号后的数字5实际上是一个简写的逻辑在哪里:
var eggie : Nest = Nest(5)
Run Code Online (Sandbox Code Playgroud)
AKA初始化新实例的"标准"方式......
这只是处理该转换的ExpressibleByIntegerLiteral协议内部隐藏的东西吗?
谢谢
它是编译器的魔力,所以很遗憾你不能自己声明这样的协议.:(
它与内部运作无关ExpressibleByIntegerLiteral.编译器只Nest在左侧看到一个类型的变量,在右侧看到一个整数文字.它认为,
哦! 该
Nest类型符合ExpressibleByIntegerLiteral!我看到一个整数字面值.这意味着我可以将整数文字更改为Nest(integerLiteral: 5)!
就这么简单.其他ExpressibleByXXXLiteral协议也是如此.
您无法声明自己的ExpressibleByMyClass协议,因为编译器不知道它.
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |