可變我有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