Swift--14类型扩展

来源:互联网 发布:c语言经典书 编辑:程序博客网 时间:2024/06/11 17:42

/*

功能:

扩展就是向一个已有的类、结构体或枚举类型添加新功能。

这包括在没有权限获取原始源代码的情况下扩展类型的能力。

类似于OC中的分类(Swift的扩展没有名字)


语法:

extension 类型 {

    扩展内容

}


作用:

1、添加计算型属性和计算静态属性

2、定义实例方法和类型方法

3、提供新的构造方法

4、定义下标

5、定义和使用新的嵌套类型

6、使一个已有类型符合某个接口

*/


//以下标方式访问字符串中的字符

extension String {

    //实现此方法可以通过下标方式访问成员

    subscript (i:Int) -> Character {

        get {

            returnself[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 {

        staticlet stu: Student =Student()

    }

    classfunc defaultStudent() ->Student {

        returnTempType.stu

    }

#else

    classfunc defaultStudent() ->Student {

        struct TempType {

            staticlet stu: Student =Student()

        }

        returnTempType.stu

    }

#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()//扩展方法