Android程序员学IOS-Swift如何实现Java中的抽象类

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android程序员学IOS-Swift如何实现Java中的抽象类脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
AndROId编程中接口和抽象类的使用其实是非常频繁的,刚开始接触Swift的时候,发现Swift里面没有抽象类这个概念,非常别扭,其实PRotocol就是类似Java中的接口和抽象类的东西。接下来我们看看如何在Swift中实现一个抽象类。

任务

学过Java的都知道,抽象类具有以下特性:

  • 实体参数[抽象类自己的参数,不需要子类继承就可以使用]
  • 实体方法[抽象类自己的方法,不需要子类实现的方法]
  • 抽象方法[需要子类继承的方法]

Protocol最常用的方法是类似Java中的Interface,用来声明一些子类必须实现的属性和方法。
所以抽象方法就不需要我们去思考了,非常简单,直接在Protocol中声明即可

protocol AbstractClass {     VAR value : String{get set}     func abstractFun() }

实体方法

这个任务看上去非常简单,随便百度一下就知道,如何给Protocol扩展方法。

extension AbstractProtocol{     func extensionFun() {         print("this is a extensionFun")     } }

确实非常简单,不过抽象类中的实体方法是可以修改抽象方法中的参数的,但是上述代码中,如果直接给抽象类中的属性赋值,编译器会报错Cannot assign to proPErty: 'self' is immutable
不过这个错误很好解决,直接给方法前面加上一个mutating就可以了。
虽然这种方法能够直接编译通过,不过你会发现,当我们的类实现Protocol的时候,我们并不能调用到extensionFun方法,依然会报Cannot assign to property: 'self' is immutable错误,也就是说,必须要mutable的方法才能调用被mutating修饰的方法。
在子类中无法使用父类中的方法,这显然和Java中的抽象类不符,所以我们需要换一种方法来实现实体方法
到底该如何做呢,其实只需要在Protocol后面加上 : @L_512_9@就可以了,这是用来限定协议只能应用在class上面,加上这个参数之后,我们就可以在扩展出来的方法中为抽象属性赋值了。

protocol AbstractClass : class{}
@H_274_126@实体属性

为Protocol实现实体属性,这个比较简单,和为已有类扩展属性是一样的,可以参考我的文章Swift快速为类扩展属性,就可以非常轻松的声明一个实体属性。

    var noNeedImplementProperty : String{         get{ return get0() }         set{ set0(newValue)}     }

例子

最后我们来看一个简单的抽象类的完整代码

protocol AbstractProtocol : class , Property{     var mustImplementProperty : String{get set}     func mustImplementFun() }  extension AbstractProtocol{     var noNeedImplementProperty : String{         get{ return get0() }         set{ set0(newValue)}     }          func noNeedImplementFunction() {         print("this is a noNeedImplementFunction")         self.noNeedImplementProperty = "[set in noNeedImplementFunction]"         print("I can use noNeedImplementProperty,this property value is : (self.noNeedImplementProperty)")         self.mustImplementProperty = "[set in noNeedImplementFunction]"         print("I can use mustImplementProperty,this property value is : (self.noNeedImplementProperty)")     }      }  class test: AbstractProtocol {     var mustImplementProperty: String = ""          func mustImplementFun() {         print("this is a mustImplementFun")         self.noNeedImplementProperty = "[set in mustImplementFun]"         print("I can use noNeedImplementProperty,this property value is : (self.noNeedImplementProperty)")         self.mustImplementProperty = "[set in mustImplementFun]"         print("I can use mustImplementProperty,this property value is : (self.noNeedImplementProperty)")     }      }

总结

Android程序员在学习IOS的过程中,肯定会有很多思想禁锢,有很多Android里面有的东西IOS里面是没有的,不过我们可以尽量想办法去实现。其实,最好的办法是去接受IOS里面的一些思想,多看别人写的代码,能够得到一些启发。

脚本宝典总结

以上是脚本宝典为你收集整理的Android程序员学IOS-Swift如何实现Java中的抽象类全部内容,希望文章能够帮你解决Android程序员学IOS-Swift如何实现Java中的抽象类所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。