Swift - требует, чтобы классы, реализующие протокол, были подклассами определенного класса.

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

protocol TransmogrifiableView {
    func transmogrify()
}

Тем не менее, этот протокол делаетне обеспечить, чтобы каждыйTransmogrifiableView бытьNSView также. Это значит что любойNSView методы, которые я вызываю наTransmogrifiableView не наберет проверку:

let myView: TransmogrifiableView = getTransmogrifiableView()
let theSuperView = myView.superView // error: TransmogrifiableView does not have a property called 'superview'

Я не знаю, как требовать, чтобы все классы, реализующие мой протокол, также были подклассамиNSView, Я попробовал это:

protocol TransmogrifiableView: NSView {
    func transmogrify()
}

но Свифт жалуется, что протоколы не могут наследоваться от классов. Это не помогает превратить протокол в протокол только для класса, используя

protocol TransmogrifiableView: class, NSView {
    func transmogrify()
}

Я не могу сделатьTransmogrifiableView суперкласс, а не протокол, потому что некоторые из моихTransmogrifiableView классы должны быть подклассами других, не трансмогрифицируемых представлений.

Как я должен требовать, чтобы всеTransmogrifiableViewтакже будетNSView«S? Я действительно не хочу, чтобы мой кодas«преобразования, которые являются плохой формой и отвлекают.

Ответы на вопрос(8)

Ваш ответ на вопрос