如何解决存在类型和泛型与协议逻辑 Swift 2
与协议相比,我正在尝试了解泛型在编译和运行时阶段的作用。 我知道协议如何与存在类型做出反应。协议是存在类型,所以在编译阶段他们一步一步地采用 Car 类型
struct Car: Drivable {
let numberOfWheels = 4
func drive() { }
}
car =
payload_data_0 = 0x0000000000000004,payload_data_1 = 0x0000000000000000,payload_data_2 = 0x0000000000000000,instance_type = 0x000000010b50e410
ExistentialContainers`type metadata for
ExistentialContainers.Car,protocol_witness_0 = 0x000000010b50e1c8
ExistentialContainers`protocol witness table for
ExistentialContainers.Car: ExistentialContainers.Drivable
in ExistentialContainers)
泛型怎么样?我真的很想知道编译和运行时阶段的行为。他们使用指针对吗?什么时候编译?在运行时,一切都为泛型做好了准备。
这个例子看起来也一样,但一个是编译,另一个不是..
protocol Returnable {
associateType ReturnType
}
//This will compile
func returnTheType<T: Returnable>(object: T) -> T.ReturnType { } ✅
//This won't compile
func returnTheType(object: Returnable) -> object.ReturnType { } ❌
解决方法
func startTravelingWithCar(transportation: Car) { }
我想你有这样的功能,
在幕后,该函数还接收汽车的 PWT 和 VWT,为该函数提供必要的信息,以便能够在必要时设置值缓冲区,并确定汽车对象的协议特定函数实现 drive()。这个新生成的函数现在是类型特定的,让你可以访问 Car 对象的任何关联类型,所有这些类型信息都是在编译时确定的——这就是为什么我们可以将关联类型作为返回类型的部分原因一个通用函数,但不能为基于协议的函数做同样的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。