Вернуть класс, соответствующий быстрому протоколу (фактический класс, а не его экземпляр) - PullRequest
0 голосов
/ 25 сентября 2018

У меня проблемы с возвратом класса вместо его экземпляра, соответствующего протоколу.Это то, что можно сделать?Вот примерный код моего кода:

public protocol MyProt {
    //things
}

var protConformer: MyProt {
    return boolVar ? ClassOne : ClassTwo // where both classes conform to MyProt
}

Конечно, здесь я получаю сообщение об ошибке "Cannot convert return expression of type 'ClassOne.Type' to return type 'MyProt'.Любые идеи о том, возможно ли это?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Тип MyProt означает «экземпляр типа, который принимает MyProt».Если вы действительно хотите манипулировать метатипами, синтаксис:

var protConformer: MyProt.Type {
    return boolVar ? ClassOne.self : ClassTwo.self
}

Но я должен предупредить вас, что это почти никогда не правильно.Возможно, вы ищете универсальный здесь (в любых ваших реальных проблем).

0 голосов
/ 25 сентября 2018

Вам необходимо изменить тип protConformer на мета-тип протокола, а именно MyProt.Type, если вы хотите вернуть тип , соответствующий протоколу, а не экземпляр такого типа.

var protConformer: MyProt.Type {
    return boolVar ? ClassOne.self : ClassTwo.self
}
...