Как привести тип к общему типу: MyType <ConformingX>(ConformingX - это класс, соответствующий протоколу) - PullRequest
0 голосов
/ 08 ноября 2018

как мне этого добиться: я хочу привести к универсальному типу с 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>

1 Ответ

0 голосов
/ 08 ноября 2018

Хорошо, я нашел решение для моего сложного случая. Просто добавьте тот же родовой класс к классу, в котором выполняется код:

class ClassThatRunsTheCode<X> where X: SomeProtocol{

    func executingFunc(){
        // working
        let castedMyType = notCastedMyType as? MyType<X>
    }
}
...