Swift—继承
一个类可以继承另一个类的方法,属性和其他特性。当一个类继承其他类时,继承类叫子类,被继承类叫超类(或父类)。在Swift中,继承具有单继承的特点,每个子类只有一个直接父类,继承是区分类与其他类型的一个基本特征。
在Swift中,类可以调用和访问父类的方法,属性和下标脚本,并且可以重写这些方法,属性和下标脚本来优化或修改他们的行为。Swift会检查你的重写定义在父类中是否有匹配的定义,以此确保你的重写行为是正确的。可以为类中继承来的属性添加属性观察器,这样,当属性值改变时,类就会被通知到。可以为任何属性添加属性观察器,无论它原来被定义为存储型属性还是计算型属性。
1.定义一个基类
不继承于其他类的类,称之为基类。(Swift中的类并不是从一个通用的基类继承而来。如果你不为你定义的类指定一个超类的话,这个类就自动成为基类。)
class Fruit {
var weight = 0.0
func info() {
print("我是一个水果,重\(weight)")
}
}
var f = Fruit()
f.info() //我是一个水果,重0.0
2.子类生成
子类生成指的是在一个已有类的基础上创建一个新的类。子类继承父类的特性,并且可以优化或改变它。你还可以为子类添加新的特性。为了指明某个类的超类,将超类名写在子类名的后面,用冒号分隔:
class SomeClass: SomeSuperClass {
//类的定义
}
定义一个Apple类,继承Fruit
class Apple: Fruit {
var name : String!
func taste() {
print("\(name) taste good")
}
}
var a = Apple()
a.weight = 3.2
a.name = "黄香蕉"
a.info() //我是一个水果,重3.2
a.taste() //黄香蕉 taste good
3.重写
子类可以为继承来的实例方法,类方法,实例属性或下标脚本提供自己的实现,这种行为叫重写。当子类重写父类的方法时,要使用override修饰。
当子类重写了父类的方法,属性或下标脚本,子类将无法访问父类中被覆盖的内容,此时你可以使用super前缀来访问父类版本的方法,属性和下标脚本。
3.1重写方法
Apple类重写了父类的info方法,并调用super.info,打印两次。
class Apple: Fruit {
var name : String!
func taste() {
print("\(name) taste good")
} override func info() {
super.info()
print("\(name) weight is \(weight)")
}
}
var a = Apple()
a.weight = 3.2
a.name = "黄香蕉"
a.info() //我是一个水果,重3.2 黄香蕉 weight is 3.2
3.2重写属性
Swift允许提供定制的getter(或setter)来重写任意继承来的属性,无论继承来的属性是存储型的还是计算型的属性。子类并不知道继承来的属性是存储型的还是计算型的,它只知道继承来的属性的名字和类型。因此你在重写一个属性时,必须将它的名字和属性都写出来。可以将一个继承来的只读属性重写为一个读写属性,但不能将一个继承来的读写属性重写为一个只读属性。
class Fruit {
var weight = 0.0
var description : String {
return "\(self.weight)"
}
} class Apple: Fruit {
var name : String!
override var description: String {
return self.name + " weight is " + super.description
}
}
var a = Apple()
a.weight = 4.0
a.name = "黄香蕉"
print(a.description) // 黄香蕉 weight is 4.0
3.3重写属性观察者
不要为继承来的常量存储属性或继承来的只读计算型属性添加属性观察者,这些属性的值是不会发生任何改变的。
不要同时提供重写的setter和重写的属性观察器,如果你想观察属性值的变化,并且已经为那个属性提供了setter方法,那么你在setter中就可以观察到了。
class Fruit {
var weight = 0.0
} class Apple: Fruit {
var name : String!
override var weight: Double {
didSet {
super.weight += 1
}
}
}
var a = Apple()
a.weight = 4.0
print(a.weight) //5.0
3.4重写下标
重写下标可以提供定制的getter和setter。重写下标时,可以将父类的只读下标改写为读写下标,但不能将父类的读写下标重写为只读下标。
3.5防止重写
final修饰符,可修饰类、属性、方法、下标。使用final修饰的类不能被继承,使用final修饰的方法、属性、下标脚本不能被重写。
Swift—继承的更多相关文章
- 学习Swift -- 继承
继承 一个类可以继承另一个类的方法(methods),属性(properties)和其它特性.当一个类继承其它类时,继承类叫子类,被继承类叫超类(父类). 在 Swift 中,子类可以调用和访问父类的 ...
- Swift: 继承
为了在属性值改变的时候获得通知,类可以为继承的属性添加属性观察者.属性观察者可以添加到任何属性上,不管这个属性原来是存储属性还是计算属性. Swift中的类没有一个统一的基类. 为了讲明白继承,我们先 ...
- Swift继承的用法
一个类可以继承另一个类的方法,属性和其它特性.当一个类继承其它类,继承类叫子类,被继承类叫超类(或父类).在Swift中,继承是区分「类」与其它类型的一个基本特征. 在Swift中,类可以调用和访问超 ...
- Swift - 继承UIView实现自定义可视化组件(附记分牌样例)
在iOS开发中,如果创建一个自定义的组件通常可以通过继承UIView来实现.下面以一个记分牌组件为例,演示了组件的创建和使用,以及枚举.协议等相关知识的学习. 效果图如下: 组件代码:Score ...
- swift 继承和构造器
继承 class Vehicle { var numberOfWheels: Int var maxPassengers: Int func description() -> String { ...
- Swift继承
//声明一个基类 class vehicle { var maxPassenger : Int = 0 var manufacturer : String! func description() -& ...
- [IOS]swift自定义uicollectionviewcell
刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollect ...
- Swift与Objective-C交互
在同一个工程中是可以同时使用Swift和OC的,但不可以同时出现在同一个文件中. OC调用Swift相关信息的方法 在***.m文件中导入工程名-Swift.h即可. 如工程名为ABC,则在需要使用S ...
- 移动开发语言Swift
苹果公布了全新的编程语言Swift,Swift继承了Objective-C语言特性,并从Python和Java Script中长处,使Swift更易读.未来swift编程语言的会特大广大的使用 Swi ...
随机推荐
- C# MVC 自定义ActionResult实现EXCEL下载
前言 在WEB中,经常要使用到将数据转换成EXCEL,并进行下载.这里整理资料并封装了一个自定义ActionResult类,便于使用.如果文章对你有帮助,请点个赞. 话不多少,这里转换EXCEL使用的 ...
- PHPExcel读取Excel文件的实现代码
<?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...
- VS一次删除多个窗体后报错
今天在做项目的时候,需要删除多个窗体,删除了之后,VS报了个错误: 命名空间“项目名称”中不存在类型或命名空间名称“文件夹”(是否缺少程序集引用?) 具体原因不清楚,就算恢复窗体后还是一样的错误,无法 ...
- win7 64位4GB内存下 tomcat7扩大内存
新部署的scm项目运行第二天报: Could not retrieve transation read-only status server 无法获取事务只读状态服务器 登录界面输入正确账号密码登录后 ...
- 作业七:团队项目——Alpha版本冲刺阶段007
今日进展:完善游戏主体代码. 今日安排:让游戏能运行起来.
- java数据结构_笔记(4)_图
图一.概念.图: 是一种复杂的非线性数据结构.图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为:G=(V, E) 其中: V 是顶点的有穷非空集合,E 是 V 中顶点偶对(称为边)的有穷 ...
- 在Eclipse for mac中配置tomcat,使web项目自动部署到tomcat
jdk.tomcat的配置就不多说了,网上一大堆. 一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运 ...
- 第三章 Git使用入门
我们都知道Linux和Android是开源的.Linux下的软件很多都不直接以二进制形式的安装包提供,而是直接提供了源代码,为了减少发行包的大小,用户须先下载源代码,在本机上编译并安装,使用make. ...
- IIS7+windows 64位配置注意事项
问题和解决办法 1 如果网站为Asp:再asp中注意启用父路径 2 操作必须使用一个可更新的查询:给用户iis_iusrs 一个完全控制的权限 3 Windows(64位IIS)未在本地计算机上 ...
- JSP 甜点
JSP cookies Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持. 通常有三个步骤来识别回头客: ...