博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift -Inheritance
阅读量:5786 次
发布时间:2019-06-18

本文共 1552 字,大约阅读时间需要 5 分钟。

Inheritance

1、没有继承任何类的类被称为基类,Swift中的类没有继承一个共有的基类(Object-C中所有的类继承NSObject),如果你定义的类没有继承任何类,那么它将自动成为基类。

2、定义类的示例:

class Vehicle {    var currentSpeed = 0.0    var description: String {        return "traveling at \(currentSpeed) miles per hour"    }    func makeNoise() {        // do nothing - an arbitrary vehicle doesn't necessarily make a noise    }}复制代码

3、声明子类的格式:

class SomeSubclass: SomeSuperclass {    // subclass definition goes here}复制代码

4、重写父类的方法要使用override关键字

class Train: Vehicle {    override func makeNoise() {        print("Choo Choo")    }}复制代码

5、重写父类的属性

  • 你可以将继承的只读属性重写为读写属性,通过提供getter和setter方法。但是你不能将继承的读写属性重写为只读属性。
  • 如果你在重写属性中提供了setter,那么你也一定要提供getter。如果你不想在重写版本中的getter里修改继承来的属性值,你可以直接通super.someProperty来返回继承来的值,其中someProperty是你要重写的属 性的名字

Example:

class Car: Vehicle {    var gear = 1    override var description: String {        return super.description + " in gear \(gear)"    }}复制代码

6、重写属性观察器

  • 你不可以为继承来的常量存储型属性或继承来的只读计算型属性添加属性观察器。这些属性的值是不可以被设置的,所以,为它们提供 willSet 或 didSet 实现是不恰当。此外还要注意,你不可以同时提供重写的 setter 和重写的属性观察器。如果你想观察属性值的变化,并且你已经为那个属性提供了定制的setter,那么你在setter 中就可以观察到任何值变化了

Example:

class AutomaticCar: Car {    override var currentSpeed: Double {        didSet {            gear = Int(currentSpeed / 10.0) + 1        }    }}let automatic = AutomaticCar()automatic.currentSpeed = 35.0print("AutomaticCar: \(automatic.description)")// AutomaticCar: traveling at 35.0 miles per hour in gear 4复制代码

7、你可以通过final关键字来禁止重写,如 final var, final func, final class func, 和final subscript等。

Example:

final class Car {    var name: String = ""}复制代码

转载地址:http://wutyx.baihongyu.com/

你可能感兴趣的文章
H3C-路由策略
查看>>
centos 修改字符界面分辨率
查看>>
LNMP之Mysql主从复制(四)
查看>>
阅读Spring源代码(1)
查看>>
nagios一键安装脚本,nagios监控被监控主机上的应用服务mysql数据库
查看>>
grep 命令
查看>>
JS二维数组的声明和使用
查看>>
v$archive_gap dg dataguard 断档处理 scn恢复
查看>>
问责IT风险管理:CIO需关注两个重点
查看>>
Winform打包发布图解
查看>>
PDF文件怎么编辑,超简单的方法
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
Uva 839 Not so Mobile
查看>>
30款超酷的HTTP 404页面未找到错误设计
查看>>
程序猿必备 MyEclipse2013-2014系列
查看>>
Windows 无法启动MongoDB服务 错误1067:进程意外终止
查看>>
在图里, 你看到了什么? 5秒内看到的话, 你很牛
查看>>
java中ArrayList 、LinkList区别
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
利用rand7()构造rand10()
查看>>