Как класс узнает связанный тип?

#swift #swiftui

#swift #swiftui

Вопрос:

UIViewRepresentable имеет…

 associatedtype Coordinator = Void
  

В одном случае у меня есть…

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

class Coordinator: NSObject, MKMapViewDelegate {
   ...
}
  

Если я добавлю…

 typealias Coordinator = Self.Coordinator
  

компилятор говорит…

Недопустимое повторное объявление «Координатора»

… ссылка на вложенный класс.

Итак, что Coordinator = Void означает и почему определение вложенного класса определяет связанный тип? Выводит ли он это из возвращаемого типа makeCoordinator ? Почему это не позволяет мне дополнительно явно указывать его с помощью typealias Coordinator = Self.Coordinator ?

Ответ №1:

Итак, что означает Coordinator = Void и почему при определении вложенного класса указывается связанный тип?

Coordinator = Void означает, что координатор необязателен, и вы можете иметь представимый без координатора, т.Е. Void это тип по умолчанию.

Выводит ли он это из возвращаемого типа makeCoordinator?

Да, это так.

Почему это не позволяет мне дополнительно явно указать его, используя typealias Coordinator = Self.Координатор?

Потому что typealias вводится новый тип, но здесь вы хотите Coordinator = Coordinator , поэтому компилятор сообщает о дублировании. Если вы хотите, вы можете представить его как

typealias OneMoreCoordinator = Self.Coordinator