访问权限
swift中访问权限由大到小依次为:open,public,internal(默认),fileprivate,private。
open
可以在任何地方访问,包括override和继承。
public
可以在任何地方访问,但其他module中不可以被override和继承,而在本module内可以被override和继承。
internal(默认访问级别,internal修饰符可写可不写)
新建文件时默认为internal,所修饰的属性或方法在整个模块内都可以访问。
fileprivate
在当前文件内可以被访问。
private
在当前类中能被访问,extension中不能访问。
重写: override
重写父类方法, 必须加上override关键字
class Man {
func sleep(){
print("父类睡觉")
}
}
class SonMan: Man {
var power:Int = 100
// override关键字主要是为了明确表示重写父类方法,所以如果要重写父类方法, 必须加上override关键字
override func sleep() {
// sleep() 不能这样写, 会导致递归
super.sleep() // 此处可以选择不调用
print("子类睡觉")
}
}
var sm = SonMan()
sm.sleep()
/**
输出:
父类睡觉
子类睡觉
*/
禁止重写: final
final关键字可以在class
、func
和var
前修饰。表示不允许对其修饰的内容进行继承或者重新操作。
class Parent {
final func method1() {
//权限验证(必须执行)
//.....
method2()
//下面是日志记录(必须执行)
//..........
}
func method2(){
//父类的实现
//......
}
}
class Child : Parent {
//只能重写父类的method2方法,不能重写method1方法
override func method2() {
//子类的实现
//......
}
}
扩展: extension
对类进行拓展:
class A{ } extension A{ func printString(name:String) { print("拓展方法:" + name) } } let a = A() a.printString(name: "Test") // 输出: 拓展方法:Test
对String进行拓展
extension String{ func toString() -> String { return "长度 = " + String(self.count) } } var Str:String = "hello" print(Str.toString()) //输出: 长度 = 5
泛型
简单理解就是用来代替任何类型
func toString<T>(param:T) -> T {
return param
}
print(toString(param: "hello"))
print(toString(param: 10))
print(toString(param: [1,2,3]))