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#中称为嵌套类
  • 嵌套类型的能够访问它外部的成员







目录
相关文章
|
2月前
|
存储 Swift 开发者
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念。通过这些特性,Swift 能够帮助开发者构建结构清晰、可维护性强的代码。本文介绍了 Swift 中 OOP 的基本概念、高级特性和实际应用,并通过一个简单的 `Car` 类示例展示了如何在 Swift 中实现面向对象编程。
33 1
|
2月前
|
存储 Swift
Swift 继承
10月更文挑战第30天
30 0
|
8月前
|
安全 Swift 开发者
【Swift开发专栏】Swift类的继承与多态
【4月更文挑战第30天】Swift中的OOP聚焦于类继承与多态,提供代码复用和类型安全。继承通过`class`和冒号实现,子类继承父类属性和方法,支持单继承以降低复杂性。多态借助协议和类型兼容实现,允许统一处理不同类型的对象。继承用于构建复杂类,多态则使代码更通用、可扩展。理解并运用这些概念对Swift开发者至关重要。
71 0
|
存储 Java Swift
Swift实用小册12:Class类的继承
和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。 这同时也是对自己学习Swift语言过程的知识整理。
239 0
Swift实用小册12:Class类的继承
|
存储 安全 Java
Swift5.0 - day5-继承、初始化、可选链、协议(上)
Swift5.0 - day5-继承、初始化、可选链、协议(上)
135 0
Swift5.0 - day5-继承、初始化、可选链、协议(上)
|
存储 Swift
Swift5.0 - day5-继承、初始化、可选链、协议(下)
Swift5.0 - day5-继承、初始化、可选链、协议(下)
95 0
|
安全
Swift5.1—构造器的自动继承
Swift5.1—构造器的自动继承
192 0
|
存储 编译器 Swift
Swift5.1—继承
Swift5.1—继承
130 0
|
安全 Swift
Swift专题讲解十四——继承
Swift专题讲解十四——继承
150 0
|
Swift iOS开发
Swift里的类继承,构造和析构代码
敲敲打打, 每天差不多一个小时来学这个, 相信到时候再用XCODE,感觉会熟悉很多。。
1342 0