大佬教程收集整理的这篇文章主要介绍了泛型 – Swift枚举中通用关联值的确切限制是什么?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
您可能会认为它们是受支持的,因为可选是这样的类型.以下是Swift标准库中可选的代码:
enum Optional<T> : Reflectable,NilLiteralConvertible { case None case Some(T) // ... }
看起来像case一些有变量类型T的关联值,对吗?
但是,在Functional Programming in Swift(第87页)中提到,不支持这种类型:
实际上,如果您将该代码片段编入编译器,则会收到错误(错误:未实现的IR生成功能非固定多有效载荷枚举布局).
那么这里发生了什么?只是它一般不支持,但是作为特殊情况支持可选?有什么办法可以看到Optional如何获得这种特殊支持?或者如果其他标准库类型也得到特殊支持?
您的意见是正确的.如果其中任何一个具有未知的大小,您不能有多个案例与关联的数据.值类型可以是任何大小(因为它们被复制).引用类型(如对象)具有已知大小,因为它们存储指针.
典型的解决方案是创建一个额外的包装类来保存泛型类型,就像FP书一样.每个人都按惯例称之为Box.有理由希望Swift团队今后能够解决这个问题.正如你所说,他们把它称为“未实现的”而不是“不支持”.
Box的典型实现:
final public class Box<T> { public let unBox: T public init(_ value: T) { self.unBox = value } }
以上是大佬教程为你收集整理的泛型 – Swift枚举中通用关联值的确切限制是什么?全部内容,希望文章能够帮你解决泛型 – Swift枚举中通用关联值的确切限制是什么?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。