Swift语法介绍: 扩展extension
扩展extension在swift中的作用类似于OC中的分类category,常用于给一些系统自带类或者第三方SDK增加功能(方法),原因在于这些类的实现不对外公开。
扩展类的方法
//扩展String类的方法
extension String {
func addPrefix (prefixString:String) -> String {
return prefixString + self
}
}
var myString = "swift"
var newString = myString.addPrefix("hi ")
myString //调用类扩展方法,并不改变self的值
newString
运行结果:
扩展计算属性
swift中的扩展extension比OC的分类category强大的一点,在于可以对基本类型Int/Double进行扩展。在扩展中不能添加普通的属性,但是可以添加计算属性,所谓计算属性指的是其值是通过计算得到的属性。其基本形式为var 属性名:类型 { 计算方法}
extension Double {
var $:Double {return (self/6.5)}
var €:Double {return (self/8)}
}
var RMB = 100.0
var dollor = RMB.$
var euro = RMB.€
运行结果:
mutating关键字
在扩展中添加的函数中,需要修改self的值时,需要在函数关键字func前添加mutation关键字,否则修改self时编译器会报错。另外,还要注意一点,self在声明时,不能是常量let。
extension String {
mutating func changeString(prefixString:String) -> String {
self = prefixString + self
return self
}
}
var myString2 = "swift"
var newString2 = myString2.changeString("hi ")
myString2 //原字符串的值发生了改变
newString2
运行结果:
代码下载
https://github.com/99ios/SwiftBasic