我想将我的Xamarin.iOS基类转换为本机,这样我也可以在只需要在iOS中完成项目时开发本机。
现在我有从UICollectionViewSource
继承的抽象类,我真的不知道如何将它放在Swift中,因为它是面向协议的。当需要覆盖属性或方法时,我可以采用“抽象”方式抛出fatalerror
。
或者我可以采用协议方式,让我的UICollectionViewSource subclass
采用协议,这样可以更好地完成代码,你不会忘记实现任何东西。
答案 0 :(得分:1)
我相信最接近的是协议和扩展。这样,您可以为具有一个的方法提供默认实现。
protocol MyCollection : UICollectionViewDataSource {
func foo() -> Double
func fooAbstract() -> Double
}
// provide default implementations
extension MyCollection {
func foo() -> Double{
return Double.infinity;
}
}
// requires missing methods to be implemented
class NewCollection : MyCollection {
...
}
编辑回答你的问题。如果这是你的意思,我不是百分之百,但我没有从扩展名中调用“虚拟”方法。以下是使用UICollection源以外的其他方法的示例(实现的方法太多了:))。
protocol MyTwo{
func fooA2() -> Bool
}
protocol MyCollection : MyTwo {
func foo() -> Double
func fooAbstract() -> Double
}
// provide default implementations
extension MyCollection {
func foo() -> Double{
if fooA2() {
return Double.infinity;
}
return 0;
}
}
class NewCollection : MyCollection {
func fooAbstract() -> Double{
return foo();
}
func fooA2() -> Bool {
return true;
}
}