类如何知道关联类型?

问题描述

UIViewRepresentable有...

associatedtype Coordinator = Void

一个实例中,我有...

func makeCoordinator() -> Coordinator {
   Coordinator(self)
}

class Coordinator: NSObject,MKMapViewDelegate {
   ...
}

如果我添加...

typealias Coordinator = Self.Coordinator

编译器说...

无效的“协调人”声明

...指的是嵌套类。

那么Coordinator = Void是什么意思,为什么定义嵌套类指定关联类型?它是根据makeCoordinator的返回类型推断出来的吗?为什么不让我另外使用typealias Coordinator = Self.Coordinator明确指定它?

解决方法

那么,Coordinator = Void是什么意思?为什么定义嵌套类指定关联类型?

Coordinator = Void表示协调器是可选的,没有协调器即可以表示。 Void是默认类型。

它是从makeCoordinator的返回类型推断出来的吗?

是的。

为什么不让我另外使用typealias Coordinator = Self.Coordinator明确指定它?

因为typealias引入了新类型,但是在这里您想要Coordinator = Coordinator,因此编译器报告重复。如果您愿意,可以将其介绍为

typealias OneMoreCoordinator = Self.Coordinator