微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift(二十、扩展)

1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~@H_404_4@

2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。@H_404_4@

二十、扩展

一个已有的类、结构体、枚举类型或协议类型添加功能。@H_404_4@

利用扩展实现在没有权限获取原始源代码的情况下扩展类型的能力(逆向建模)@H_404_4@

区别于OC,Swift的扩展没有名字@H_404_4@

1、Swift扩展提供功能

a、添加计算属性或计算静态属性————>不能添加存储属性,不能添加已有属性属性观察器@H_404_4@

b、定义实例方法和类型方法————>不能重写已有功能@H_404_4@

c、提供新的构造器@H_404_4@

d、定义下标@H_404_4@

e、定义和使用新的嵌套类型@H_404_4@

f、使已有类型遵循某个协议@H_404_4@

g、对协议进行扩展@H_404_4@

2、语法

extension SomeType {
    // 加到SomeType的新功能写到这里
}

也可适配一个或多个协议@H_404_4@

extension SomeType: SomeProtocol,AnotherProctocol {
    // 协议实现写到这里
}

3、计算属性-方法-可变实例方法

extension Int {
    //计算属性
    var km:Int {return self*1_000}
    var m :Int {return self}

    //添加方法
    func repetitions(task:() -> ()) { for _ in 0..<self { task() } } //可变实例方法修改实例本身,mutating参数 mutating func square() { self = self*self print(self) } } let oneKM = 1.km print("One km is \(oneKM) meters") 3.repetitions({ print("Hello") }) var someInt = 3 someInt.square()

Output:@H_404_4@

Hello
Hello
Hello
9

4、添加下标-构造器

扩展可以向已有类型添加新的构造器,也可为自己的创建类型添加,或者提供该类的原始实现中没有包含的额外初始化选项@H_404_4@

可以向类中添加新的便利构造器,但是不能添加新的指定构造器或析构器,这两者必须由原始类提供@H_404_4@

extension String {
    init(string:String,repeatCount:Int) {
        var count = repeatCount
        if(count <= 1) {
            self = string
        }else {
            self = string
            while(count > 1) {
                self = self + string
                count--
            }
        }
    }

    subscript(index:Int) -> Character? {
        if index < 0 || index > self.characters.count-1 {
            return nil
        }
        return self[self.endindex.advancedBy(-index-1)] } } var str:String = "Hello" print(str[0]!) var testStr = String(string: "hello",repeatCount: 3) print(testStr)

Output:@H_404_4@

o
hellohellohello

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐