继承
swift的继承是单一继承。
class className : superClass{}
多态
方法多态
class baseClass{
func move(){}
}
class superClasS{
override func move(){}
}
属性多态
通过继承属性 你可以改变 get和set
class baseClass{
var age : Int{
get {return 4}
}
}
class superClass{
override var age : Int{
get {return 7}
}
}
禁止多态
//将整个类标识为禁止继承
final class className{}
//将类的部分成员变量或者函数禁止继承
class className{
final func methodName
}
扩展
*类似于C# partial在不添加新的类的情况下来扩展原有的类*
extension className{}
但是扩展有功能限制:
添加计算型属性和计算型静态属性
extension Int{ var sub : Int {return self - 10} }
定义实例方法和类型方法
extension Int{ var say(){ return "A" } }
提供新的构造器
stuct mult{ var _x = 1 } extension mult{ init(x:Int){ _x = x } }
定义下标
extension Int{ subscript(var multtable : Int) -> Int{ var no1 = 1 while multtable > 0{ no1 *= 10 --multtable } return (self / no1) % 10 } }
嵌套类型
extension Int{ enum calc{ case add case sub } }
可变实例方法
extension Double{ mutating func square(){ return self * self } }
协议
协议只定义变量名和方法名而不需要实现.
protocal protacolName{
var property1 : datatype{get}
var property2 : datatype{get set}
func methodName(parameters) -> datatype
}
协议中所有的变量和方法必须在继承的类中实现
protocol test{
var cash : Int{get}
func purchase(price : Int) -> String
}
class Shopper : test{
var cash : Int
func purchase(price : Int) -> String{
cash -= price
return "OK"
}
}
可选协议
定义可选变量和方法
@objc protocol protocolName{
var requiredProperty : dataType
optional var optionalProperty : dataType
}
class className : protocalName{
@objc var requiredProperty : dataType = initialValue
var requiredProperty : dataType = initialValue
}
协议继承
不同于类的继承是单一的,一个协议可以继承多个接口
protocal first{}
protocal seconde{}
protocal third : first,second{}
协议扩展
protocal cat{}
extension cat{}
//协议选择性扩展
extension Cat where self:Black{}