作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我明白 indirect
的作用。我不明白的是为什么需要这个关键字。编译器没有足够的信息来自行解决这个问题吗?
enum Foo {
case Bar(Foo)
}
除非标记为indirect
,否则上面的代码不会编译,但编译器已经可以检测到它是间接的,因为它再次使用相同的类型。即使我们做一些更复杂的事情,它也应该能够解决这个问题。
enum Foo {
case Bar(Baz)
}
enum Baz {
case Bob(Foo)
}
即使在这里,编译器也有足够的信息知道 Foo
和 Baz
是递归的。例如,Haskell 对于类似的递归类型不需要这样的关键字,因此显然可以将这样的东西构建到编译器中。
那么,为什么我们需要 indirect
关键字呢?
最佳答案
Swift 不想解决这个问题。它希望被明确告知,因此可以确定您编写的代码就是您想要编写的代码。
关于swift - 为什么在递归 Swift 枚举中需要 indirect 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35185525/
我是一名优秀的程序员,十分优秀!