установить связанное свойство в инициализаторе - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть этот протокол:

protocol TypeProtocol {

    associatedtype myType

}

И класс, соответствующий протоколу:

class MyClass: TypeProtocol {

    typealias myType = Any


    init() {
        //some logic here to find out what class to use

        myType = String

    }
}

Но myType неизменен, поэтому я не могу изменить его на String, так как яуже установить его на любой.Я не вижу, как использовать myType как дополнительный, и у меня нет доступа к типу, пока я не инициализирую.

Как бы мне обойти это?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2019

Вот пример того, как вы делаете это с использованием обобщений, чтобы тип не определялся до тех пор, пока класс не будет инициализирован

protocol TypeProtocol {
    associatedtype myType
}

class MyClass<T>: TypeProtocol {

    typealias myType = T

    let data: T
    init(_ data: T) {
        self.data = data
    }
}

Пример

let my = MyClass("abc")
print(type(of: my.data))
0 голосов
/ 20 сентября 2019

Это, кажется, путь:

class MyClass<T>: TypeProtocol {

    typealias myType = T


}

, а затем

MyClass<Int>()
...