То, что я пытаюсь сделать, - это иметь два параметра универсального типа, один из которых является конкретным типом, а другой - таким протоколом:
@propertyWrapper
struct Implementation<T, P> where T : AnyObject, T : P { // Compiler error
var wrappedValue: P { projectedValue }
var projectedValue: T
init(_ instance: T) {
self.projectedValue = instance
}
}
Таким образом, фактический тип может быть скрыт, и будет открыт только протокол.
Теперь это не работает, потому что P
- это неклассовый, не протокольный тип, поэтому T
не может быть ограничен им.
Это можно обойти?