У меня есть класс, который должен быть установлен с переменной подкласса NSObject и который реализует определенный протокол.Что такое быстрый эквивалент NSObject <Protocol>?
protocol ProtoTest {
var foo: Int { get set }
}
class AClass: NSObject, ProtoTest {
var foo: Int = 3
}
class BClass: NSObject, ProtoTest {
var foo: Int = 4
}
class Consumer {
var protoInstance: ProtoTest? //Does not cary any information of the class just the protocol
var protoInstance2: protocol<NSObjectProtocol, ProtoTest>?
init(x: ProtoTest) {
self.protoInstance = x
self.protoInstance2 = nil
}
init(x: protocol<NSObjectProtocol, ProtoTest>) {
self.protoInstance2 = x
self.protoInstance = nil
}
func doSomething() {
if let x = protoInstance {
x.copy() //'ProtoTest' does not have a member named 'copy'
}
if let x = protoInstance2 {
x.copy() //protocol<NSObjectProtocol, ProtoTest> does not have a member named 'copy'
}
}
}
В приведенном выше примере никакие декларации переменной не будут работать. поскольку ни у кого из них нет знания базового класса?
Как это реализовать в быстром?
Спасибо Roman, Таким образом, вы не думаете, есть способ обеспечить NSObject в объявлении переменной? –
Можно определить переменную как «var protoInstance: NSObject?», а затем перевести на «Prototest», если вы хотите ее использовать. Но если вы хотите применить что свойство является и «NSObject' * и * a« Prototest », тогда вам придется использовать дженерики где-то ... –
@EdwardAshak« Итак, вы не думаете, что есть способ принудительного применения NSObject ». Почему вы думаете, что вам нужно это сделать? – matt