30 如何在Swift中实现继承

简介: 如何在Swift中实现继承

如何在Swift类中实现继承

定义基类

  • 任何不从另一个类继承的类都是所谓的基类
  • Swift类不会从一个通用基类继承。你没有指定特定父类的类都会以基类的形式创建

image.png

子类

  • 子类是基于现在类创建新类的行为。子类从现有的类继承了一些特征,你可以重新定义它们。你也可以为子类添加新的特征
  • 为了表明子类有父类,要把子类写在父类的前面,用冒号分隔

image.png

重写

  • 子类可以提供它自己的实例方法、类型方法、实例属性,类型属性或下标脚本的自定义实现,否则它将会从父类继承。这就所谓的重写
  • 要重写而不是继承一个特征,你需要在你的重写定义前面加上override关键字。这样做说明你打算提供一个重写而不是意外提供了一个相同定义。意外的重写可能导致意想不到的行为,并且任何没有使用override关键字的重写都会在编译时被诊断为错误

访问父类的方法、属性和下标脚本

  • 你可以通过使用super前缀访问父类的方法、属性或下标脚本
  • 一个命名为someMethod()的重写方法可以通过super.someMethod()在重写方法的实现中调用父类版本的someMethod()方法
  • 一个命名为someProperty的重写属性可以通过super.someProperty在重写的getter或setter实现中访问父类版本的someProperty属性
  • 一个命名为someIndex的重写下标脚本可以使用super[someIndex]在重写的下标脚本实现中访问父类版本中相同的下标脚本

重写方法

  • 可以在子类中重写一个继承的实例或类型方法来提供定制的或替代的方法实现

image.png

重写属性的getter和setter

  • 可以提供一个自定义的getter(和setter,如果合适的话)来重写任意继承的属性,无论在最开始继承的属性实现为存储属性还是计算属性

image.png

重写属性的观察器

  • 可以使用属性重写来为继承的属性添加属性观察器。这就可以让你的在继承属性的值改变时得到通知,无论这个属性最初如何实现
  • 不能给继承而来的常量存储属性或者只读的计算属性添加属性观察器。这些属性的值不能被设置,所以提供willSet或didSet实现作为重写的一部分也是不合适的
  • 不能为同一个属性同时提供重写的setter和重写的属性观察器。如果你想要监听属性值的改变,并且你已经为那个属性提供了一个自定义的setter, 那么你从自定义的setter里就可以监听任意值的改变

image.png

阻止重写

  • 可以通过标记为final来阻止一个方法、属性或者下标脚本被重写。通过在方法、属性或者下标脚本的关键字前写final修饰符(比如final var,final func,final class func,final subscript)


如何在Swift中实现多态和进行类型转换

类型

image.png

类型检查

  • 使用类型检查操作符(is)来检查一个实例是否属于一个特定的子类。如果实例时该子类类型,类型检查操作符返回true,否则返回false

向下类型转换

  • 某个类类型的常量或变量可能实际上在后台引用自一个子类的实例。当你遇到这种情况时你可以尝试使用类型转换操作符(as?或as!)将它向下类型转换至其子类类型
  • 由于向下类型转换可能失败,类型转换操作符就有了两个不同形式。条件形式,as?,返回了一个你将要向下类型转换的值得可选项。强制形式,as!,则将向下类型转换和强制展开结合为一个步骤
foriteminarray {
ifletrealItem=itemas?Movice {
print(realItem.director)
    }
}

Any和AnyObject

  • Swift为不确定的类型提供了两种特殊的类型别名
  • AnyObject可以表示任何类型的实例
  • Any 可以表示任何类型,包括函数类型

嵌套类型

  • Swift中的类,结构体和枚举可以进行嵌套,即在某一类型的内部定义类型,这种类型嵌套在Java中称为内部类,在C#中称为嵌套类
  • 嵌套类型的能够访问它外部的成员







目录
相关文章
|
安全 Swift
Swift专题讲解十四——继承
Swift专题讲解十四——继承
120 0
《从零开始学Swift》学习笔记(Day43)——构造函数继承
<span style="font-family:宋体;font-size: 10.5pt; mso-ascii-font-family: Arial; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Arial; mso-bidi-font-family: A
1358 0
|
4月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
99 2
|
3月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
211 2
|
4月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
225 1
|
4月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
69 0
|
6月前
|
JavaScript 前端开发 PHP
用swift开发ios移动端app应用初体验
直接跟着 apple 官方的 SwiftUI 教程跑的,写惯了 javascript 奔放的代码,很多语法理解起来还是有点费劲
59 1
|
8月前
|
Swift iOS开发
iOS OC混编Swift 后者无法走断点
iOS OC混编Swift 后者无法走断点
49 0
|
Swift iOS开发
IOS使用Swift加载Xib文件
IOS使用Swift加载Xib文件
270 0

相关课程

更多