将Xamarin.iOS代码转换为本机代码?

时间:2016-02-02 06:53:27

标签: c# swift xamarin.ios abstract-class

我想将我的Xamarin.iOS基类转换为本机,这样我也可以在只需要在iOS中完成项目时开发本机。

现在我有从UICollectionViewSource继承的抽象类,我真的不知道如何将它放在Swift中,因为它是面向协议的。当需要覆盖属性或方法时,我可以采用“抽象”方式抛出fatalerror

或者我可以采用协议方式,让我的UICollectionViewSource subclass采用协议,这样可以更好地完成代码,你不会忘记实现任何东西。

1 个答案:

答案 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;
    }
}