swift学习日记(七)下标 继承

来源:互联网 发布:格里芬体侧数据 编辑:程序博客网 时间:2024/05/19 16:22



一,下标

下标这个也是可以跟c++平滑过渡的特性,使用方法几乎一样


1,读写

swift的下标操作是有读写和只读两种属性的,比如String的下标操作就是只读,不允许你修改


这里我们主要讨论的是怎么为自定义的类添加下标操作,与c++需要重载运算符不同,swift的定义更加简单

var str:Array = [1, 2, 3]class family {    init(s: String, d:String, m:String) {        son = s        dad = d        mom = m    }    func set(s s:String, d:String, m:String) {        son = s        dad = d        mom = m    }    subscript(index:String) -> String {        get {            if index == "son" {                return son;            }            if index == "dad" {                return dad            }            if index == "mom" {                return mom            }            return "Default"        }    }    var son = "Default"    var dad = "Default"    var mom = "Default"}var Dumphy = family(s: "Luke", d: "Phil", m: "Clair")print(Dumphy["mom"])

跟普通的方法定义差不多

注意,这里我只用了一个get,你既可以都不用,也可以只用get或者set其中一个,也可以都用,分别代表了该类的下标读写权限,两个都不用好像是只读,我没试,各位自己试,这里只有get即为只读权限

2,集合类型的下标

元组,数组,字典都可以用下标,这个应该一讲就会,不细说

唯一需要注意的是,至少对于字典而言,下标的返回类型是 不是键值的类型,而是带上了个 ?,如果报错了,考虑先用let先把 ?去掉

3,下标重载

swift的下标其实就只是一个特殊的方法,也可以有不同类型的参数,也可以有不止一个参数,这点不赘述

没了,so easy

二,继承

也是跟c++很像

子类继承父类的属性和方法,这是目前多数语言都广泛使用的特性,swift也不例外

1,概念

首先,跟c++一样,构造函数是不会继承的,需要另外调用

另外,在swift2中,子类声明构造函数需要加上override声明重写,这点我没看官方文档,目测是新加的特性

var str:Array = [1, 2, 3]class family {    init() {        son = "Default"        dad = "Default"        mom = "Default"    }    init(s: String, d:String, m:String) {        son = s        dad = d        mom = m    }    func set(s s:String, d:String, m:String) {        son = s        dad = d        mom = m    }    subscript(index:String) -> String {        get {            if index == "son" {                return son;            }            if index == "dad" {                return dad            }            if index == "mom" {                return mom            }            return "Default"        }    }    var son:String    var dad:String    var mom:String}class modernFamily:family {    override init() {        super.init()    }    override init(s: String, d: String, m: String) {        super.init()        son = "Manny"        mom = "Glorier"        dad = "Jay"    }    }var Dumphy = family(s: "Luke", d: "Phil", m: "Clair")


几个要点无非就是:重写方法和属性要override,调用父类方法和属性要super

此外,像计算属性啊,观察者属性啊什么的都能用


2,禁止重写

在父类的方法添加final能禁止子类重写该方法


在父类class前添加 @final禁止该类被继承


over,see you tomorrow



0 0