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
«преобразования, которые являются плохой формой и отвлекают.