存在类型与协议泛型逻辑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)

泛型呢我真的很想知道在编译运行时阶段如何操作。他们使用指针,对吗?编译时是什么时候?在运行时,Generic的一切都准备就绪。

同样,这个例子看起来是一样的,但一个是编译的,另一个不是。。

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对象的任何关联类型,所有这些类型信息都是在编译时确定的——这也是为什么我们可以将关联类型作为泛型函数的返回类型,但不能对基于协议的函数执行相同操作的部分原因。

最新更新