您的位置:首页 > 移动开发 > Swift

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

2015-12-15 21:46 465 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u013418097/article/details/50321109



一,下标

下标这个也是可以跟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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: