Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift2 存在类型和具有协议逻辑的泛型Swift 2_Swift2 - Fatal编程技术网

Swift2 存在类型和具有协议逻辑的泛型Swift 2

Swift2 存在类型和具有协议逻辑的泛型Swift 2,swift2,Swift2,我试图学习泛型在编译和运行时阶段如何与协议进行比较。 我知道如何应对存在类型。协议是存在类型,因此在编译阶段,它们一步一步地使用Car类型 struct Car: Drivable { let numberOfWheels = 4 func drive() { } } 泛型呢?我真的很想知道在编译和运行时阶段如何操作。他们使用指针对吗?什么时候是编译时?在运行时,泛型的一切都准备好了 这个例子看起来也一样,但一个是编译的,另一个不是 protocol Returnable {

我试图学习泛型在编译和运行时阶段如何与协议进行比较。 我知道如何应对存在类型。协议是存在类型,因此在编译阶段,它们一步一步地使用Car类型

struct Car: Drivable {
    let numberOfWheels = 4

    func drive() { }
}
泛型呢?我真的很想知道在编译运行时阶段如何操作。他们使用指针对吗?什么时候是编译时?在运行时,泛型的一切都准备好了

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

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 returnTheType(对象:T)->T.ReturnType{}✅
//这不会编译
func returnTheType(对象:Returnable)->object.ReturnType{}❌
我想你有一个这样的函数


在后台,该函数还接收汽车的PWT和VWT,为函数提供必要的信息,以便在必要时设置值缓冲区,并确定汽车对象特定于协议的drive()函数实现。这个新生成的函数现在是类型特定的,允许您访问Car对象的任何关联类型,并且所有这些类型信息都是在编译时确定的-这就是为什么我们可以将关联类型作为泛型函数的返回类型的部分原因,但是不能对基于协议的函数执行同样的操作。

您实际上在问什么?协议和泛型的内部编译器处理?对于绝大多数开发来说,用Swift编写代码不需要(实际上也不应该需要)了解详细信息。我想先学习Swift的原理。我想知道泛型如何得到它的类型,以及为什么它们在协议中表现不同,正如我在上面解释的“我不想编写asp代码。我想先学习Swift的机制。”-这让我想起了我的叔叔,当被问到他是否知道如何使用Microsoft Office时,他说他想先理解二进制代码我再也不能用现代Swift重现那篇文章中的结果了。你可能想找另一篇文章来学习。
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) { }