Ios Swift ExpressibleByIntegerLiteral-它到底是如何工作的?

Ios Swift ExpressibleByIntegerLiteral-它到底是如何工作的?,ios,swift,protocols,Ios,Swift,Protocols,摘自iOs 10编程基础: “由于Nest采用ExpressibleByIntegerLiteral,我们可以在需要Nest的位置传递一个Int,并且我们的init(integerLiteral:)将自动调用…” 好的,所以我的问题是…如何自动调用它??当我试图找出原因时,我的逻辑遇到了障碍。据我所见,你可以说: var eggie : Nest = 5 但是。。。好的,在等号后面的数字5实际上是一个缩写的逻辑是什么 var eggie : Nest = Nest(5) 又名初始化新实例的“

摘自iOs 10编程基础:

“由于Nest采用ExpressibleByIntegerLiteral,我们可以在需要Nest的位置传递一个Int,并且我们的init(integerLiteral:)将自动调用…”

好的,所以我的问题是…如何自动调用它??当我试图找出原因时,我的逻辑遇到了障碍。据我所见,你可以说:

var eggie : Nest = 5
但是。。。好的,在等号后面的数字5实际上是一个缩写的逻辑是什么

var eggie : Nest = Nest(5)
又名初始化新实例的“标准”方式

这只是处理转换的ExpressibleByIntegerLiteral协议中隐藏的东西吗


感谢使用
expressibyby*Literal
协议可以快速“钩住”特殊的编译器行为。如果没有编译器在后面执行提升操作,他们将无法执行任何操作。

这是编译器的魔力,因此很遗憾,您不能自己声明这样的协议:(

它与
ExpressibleByIntegerLiteral
的内部工作无关。编译器只在左侧看到
Nest
类型的变量,在右侧看到整数文本。它认为

噢,
Nest
类型符合
ExpressibleByIntegerLiteral
!我看到一个整数文本。这意味着我可以将整数文本更改为
Nest(integerLiteral:5)

就这么简单。其他
expressiblebyxxliteral
协议也是如此

您不能声明自己的
expressibleByClass
协议,因为编译器不知道它。

编译器将
var eggie:Nest=5
转换为
var eggie=Nest(integerLiteral:5)
var eggie : Nest = Nest(5)