Swift UI использует View в протоколе (Protocol 'View' может использоваться только как обобщенное ограничение c, потому что оно имеет Self или требования к связанному типу) - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу использовать View в протоколе.

protocol Test {
    var view: View { get }
}

Протокол 'Просмотр' может использоваться только как обобщенное c ограничение, потому что он имеет требования к Self или связанные с типами

Я просто хочу сделать то же самое, что и с моим ViewController. Есть идеи?

protocol Test {
    var viewController: UIViewController { get }
}

Если я использую связанный тип, я получаю ошибку в других моих протоколах.

protocol Test2: Test { 
    //STUB
}

Есть идеи, как решить эту проблему? Спасибо:)

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Вы не можете напрямую использовать протокол, если не объявите его как связанный тип, но вместо этого вы можете использовать тип стертый AnyView:

protocol Test {
    var view: AnyView { get }
}

Создание экземпляра AnyView может добавить некоторый шум в коде, однако, его легко создать.

0 голосов
/ 12 февраля 2020

SwiftUI.View является протоколом, и поскольку он использует Self (например, в своем свойстве body ), вы не можете напрямую объявить тип свойства как View.

Вы можете определить связанный тип для Test и ограничить этот тип как View:

protocol Test {
    associatedtype T: View
    var view: T { get }
}
...