В контексте у меня есть класс A
, который имеет много свойств, но я хочу показать только некоторые из них, и один из них является универсальным типом.
Затем я пытаюсь использовать общий протокол (может быть, это неправильное имя?) Для A.
Это нормально, но когда я пытаюсь использовать протокол вместо структуры в методене скомпилируется.
Есть предложения?
protocol AProtocol {
associatedtype T
var t: T? { get }
}
struct A<Type>: AProtocol {
typealias T = Type
var t: Type?
var a: Int
var b: Int
var c: Int
var d: Int
var e: Int
}
struct Main {
func show<T: Decodable>(a: AProtocol<T>) { // error: Cannot specialize non-generic type 'AProtocol'
}
}
РЕДАКТИРОВАТЬ:
Ниже приведен фрагмент кода после того, как я обновил ответ @ Sweeper, есть небольшая настройка дляреализация, потому что изначально в моем проекте это закрытие.
protocol AProtocol {
associatedtype T
var t: T? { get }
}
struct A<Type>: AProtocol {
typealias T = Type
var t: Type?
var a: Int?
var b: Int?
var c: Int?
var d: Int?
var e: Int?
}
struct Main {
func show<T, U>(completion: (U) -> Void) where T: Decodable, U: AProtocol, U.T == T {
let a = A<Int>()
completion(a) //error: '(A<Int>) -> Void' is not convertible to '(U) -> Void'
}
}
Не могли бы вы объяснить, почему это не сработает?