草庐IT

ios - Swift ExpressibleByIntegerLiteral - 它究竟是如何工作的?

coder 2023-09-08 原文

摘自 iOs 10 编程基础:

“因为 Nest 采用 ExpressibleByIntegerLiteral,我们可以在预期嵌套的地方传递一个 Int,我们的 init(integerLiteral:) 将被自动调用......”

struct Nest : ExpressibleByIntegerLiteral {
     var eggCount : Int = 0
     init() {}
     init(integerLiteral val: Int) {
          self.eggCount = val
     }
}

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

var eggie : Nest = 5

但是...好吧,等号后的数字 5 实际上是以下内容的简写的逻辑在哪里:

var eggie : Nest = Nest(5)

又名初始化新实例的“标准”方式...

这是否只是隐藏在处理该转换的 ExpressibleByIntegerLiteral 协议(protocol)深处的东西?

谢谢

最佳答案

这是编译器的魔法,所以不幸的是你不能自己声明这样的协议(protocol)。 :(

它与 ExpressibleByIntegerLiteral 的内部运作无关。编译器只会在左边看到一个 Nest 类型的变量,在右边看到一个整数文字。它认为,

Oh! The Nest type conforms to ExpressibleByIntegerLiteral! And I see an integer literal. This means that I can change the integer literal to Nest(integerLiteral: 5)!

就这么简单。对于其他 ExpressibleByXXXLiteral 协议(protocol)也是如此。

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

关于ios - Swift ExpressibleByIntegerLiteral - 它究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40811343/

有关ios - Swift ExpressibleByIntegerLiteral - 它究竟是如何工作的?的更多相关文章

随机推荐