将 Xamarin.iOS 代码转换为本机代码?
Converting Xamarin.iOS code to native?
我想把我的Xamarin.iOS基础类转成native,这样当一个项目只需要在iOS做的时候我也可以开发native了。
现在我有从 UICollectionViewSource
继承的抽象 类,我真的不知道如何将它放入 Swift,因为它是面向协议的。当需要覆盖 属性 或方法时,我可以采用 "abstract" 方式并抛出 fatalerror
s。
或者我可以采用协议方式,让我的 UICollectionViewSource subclass
采用协议,这会导致更好的代码完成,并且您不会忘记实现任何东西。
我相信最接近的是协议和扩展。这样您就可以为具有一个的方法提供默认实现。
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 {
...
}
编辑以回答您的问题。如果这就是你的意思,我不是 100%,但我从扩展中调用 "virtual" 方法没有问题。这是一个使用 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;
}
}
我想把我的Xamarin.iOS基础类转成native,这样当一个项目只需要在iOS做的时候我也可以开发native了。
现在我有从 UICollectionViewSource
继承的抽象 类,我真的不知道如何将它放入 Swift,因为它是面向协议的。当需要覆盖 属性 或方法时,我可以采用 "abstract" 方式并抛出 fatalerror
s。
或者我可以采用协议方式,让我的 UICollectionViewSource subclass
采用协议,这会导致更好的代码完成,并且您不会忘记实现任何东西。
我相信最接近的是协议和扩展。这样您就可以为具有一个的方法提供默认实现。
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 {
...
}
编辑以回答您的问题。如果这就是你的意思,我不是 100%,但我从扩展中调用 "virtual" 方法没有问题。这是一个使用 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;
}
}