Я знаю, что это не совсем отвечает на вопрос, и я мучаюсь из-за одной и той же проблемы в течение длительного времени. Мне бы очень хотелось увидеть правильный ответ на ваш вопрос :)

тандартный шаблонный слабый контейнер в Swift.

struct Weak<T: AnyObject> {
  weak var value: T?
  init(value: T) {
    self.value = value
  }  
}

Это хорошо работает, если вы не хотитеT быть протоколом, например,

protocol ImplementationHiding: class {}
class Implementation: ImplementationHiding {}
let w = Weak(value: Implementation() as ImplementationHiding)

Это не компилируется, к сожалению. Единственный способ найти работу - это представить@objc по протоколу:

@objc protocol ImplementationHiding {}

Единственный способ, который я нашел, довольно уродливый, так как он исключает безопасность во время компиляции.

struct Weak<T> {
  private let get: () -> T?
  init(value: AnyObject, type: T.Type = T.self) {
    get = { [weak value] in value as! T? }
  }
  var value: T? {
    return get()
  }
}

Как я могу создатьWeak с родным протоколом Swift какT?

Ответы на вопрос(1)

Ваш ответ на вопрос