/*
功能:
类似于OC中的分类(Swift的扩展没有名字)。
语法:
extension 类型 {
扩展内容
}
作用:
3、提供新的构造方法
4、定义下标
5、定义和使用新的嵌套类型
6、使一个已有类型符合某个接口
*/
//以下标方式访问字符串中的字符
extension String {
//实现此方法可以通过下标方式访问成员
subscript (i: Int) -> Character {
get {
return self[characters.index(startIndex,offsetBy: i)]
}
set {
let index = characters.index(startIndex,offsetBy: i)
self.remove(at: index)
self.insert(newValue,at: index)
}
}
}
var str = "abc"
print(str[0]) // a
str[0] = "A"
print(str) //Abc
//练习:给Int添加方法实现通过下标获取该整数对应的位上的值,计数从后往前
//如:print(1234[1]),结果将打印3
class Student {
var name: String = ""
var age: Int = 0
}
extension Student {
#if true
struct TempType {
static let stu: Student = Student()
}
class func defaultStudent() -> Student {
return TempType.stu
}
#else
class func defaultStudent() -> Student {
struct TempType {
static let stu: Student = Student()
}
#endif
}
var stu1 = Student.defaultStudent()
stu1.age = 20
var stu2 = Student.defaultStudent()
print(stu2.age) //20
//一个扩展可以扩展一个已有类型,使其能够适配一个或多个协议
protocol TestProtocol {
func test();
}
extension Student: TestProtocol {
func test() {
print("test method")
}
func extensionFunc() {
print("扩展方法")
}
}
//使用扩展的协议方法
stu2.test() //test method
//使用扩展的普通方法
stu2.extensionFunc() //扩展方法