可变我有MyObjcClass
类型的成员变量UIView<FooProtocol>* myView
iOS的,使用符合objc协议在迅速
MySwiftClass
延伸MyObjcClass
,并尝试使用myView
。
myView.doFoo()
是迅速的错误,因为迅速看到myView
为UIView
不UIView<FooProtocol>
可变我有MyObjcClass
类型的成员变量UIView<FooProtocol>* myView
iOS的,使用符合objc协议在迅速
MySwiftClass
延伸MyObjcClass
,并尝试使用myView
。
myView.doFoo()
是迅速的错误,因为迅速看到myView
为UIView
不UIView<FooProtocol>
我不认为有从UIView<FooProtocol>*
斯威夫特一个很好的直接映射。最好的办法是可能只是投它,然后拨打电话:
(myView as! FooProtocol).doFoo()
如果你有在Objective-C类控制,它可能更容易重新定义MyView的是FooProtocol:
id<FooProtocol> myView;
或者,定义在基类中调用doFoo你一个方法:
-(void)doFoo {
[myView doFoo];
}
在这种情况下,你可以使用基类的方法从SWIFT:
self.doFoo()
检查我的更新答案。 – user3441734
protocol FooProtocol {
func foo()
}
class BaseFoo {
}
class Foo: BaseFoo, FooProtocol {
func foo() {
print("job as required by FooProtocol")
}
}
class MyClass {
var myFoo: Foo = Foo()
var myFoo2: BaseFoo = Foo()
// I dont have an idea about the type, but i know it comforms to FooProtocol
var myFoo3: protocol<FooProtocol> = Foo()
}
let myClass: MyClass = MyClass()
myClass.myFoo.foo() // job as required by FooProtocol
//myClass.myFoo2.foo() // error: value of type 'BaseFoo' has no member 'foo'
myClass.myFoo3.foo() // job as required by FooProtocol
在原始问题中,基类起源于objective-c。在Swift中展示一切的例子并不能真正回答这个问题。 –
你仍然错过了原来的问题。在目标C中,声明“UIView
感谢您的解释!现在对我来说很清楚。对不起... – user3441734
声明您的myView的类型... var myView:protocol –
user3441734