как мне этого добиться: я хочу привести к универсальному типу с typeParameter, который соответствует протоколу.
Я попробовал следующее:
let castedMyType = notCastedMyType as? MyType<X>
let castedMyType = notCastedMyType as? MyType<X> where X: SomeProtocol
let castedMyType = notCastedMyType as? MyType<X where X: SomeProtocol>
let castedMyType = notCastedMyType as? MyType<X: SomeProtocol>
Но ничего не работает.
Вот пример кода, который поможет вам начать работу. Просто положите его на игровую площадку:
import Foundation
protocol SomeProtocol{}
class X{}
// example class that conforms to the protocol
class ConformingX: SomeProtocol{}
class BaseType{}
class MyType<X>: BaseType where X: SomeProtocol{}
let notCastedMyType: BaseType = MyType<ConformingX>()
// not working
let castedMyType = notCastedMyType as? MyType<X>
let castedMyType = notCastedMyType as? MyType<X> where X: SomeProtocol
let castedMyType = notCastedMyType as? MyType<X where X: SomeProtocol>
let castedMyType = notCastedMyType as? MyType<X: SomeProtocol>