美文网首页
swift 分类

swift 分类

作者: 皆为序幕_ | 来源:发表于2019-05-13 17:40 被阅读0次

    分类就是为一个已有的类、结构体、枚举类型或者协议类型添加新功能

    扩展语法

    • 使用关键字extension来声明
    extension SomeType {
        // 为 SomeType 添加的新功能写到这里
    }
    

    1.为已有类型添加新的计算型属性,但是不可以添加存储型属性

    extension Double {
        var km: Double { return self * 1_000.0 }
        var m : Double { return self }
        var cm: Double { return self / 100.0 }
        var mm: Double { return self / 1_000.0 }
        var ft: Double { return self / 3.28084 }
    }
    
    let oneInch = 25.4.mm
    print("One inch is \(oneInch) meters") //One inch is 0.0254 meters
    

    2.为已有类型添加新的便利构造器,不能为类添加新的指定构造器或析构器

    class ClassA{
        var a = 0
        var b = 0
        init(a:Int,b:Int) {
            print("a = \(a),b = \(b)")
        }
    }
    
    let a = ClassA.init(a: 2, b: 2)
    
    extension ClassA{
        convenience init(a:Int,b:Int,c:Int) {
            self.init(a:a,b:b)
            print("a = \(a),b = \(b),c = \(c)")
        }
    }
    let aa = ClassA.init(a: 1, b: 2, c: 3)
    
    //a = 2,b = 2
    //a = 1,b = 2
    //a = 1,b = 2,c = 3
    

    3.为已有类型添加新的实例方法和类型方法

    class ClassA{
        var a = 0
        var b = 0
        init(a:Int,b:Int) {
            self.a = a
            self.b = b
        }
    }
    extension ClassA{
        func sum() -> Int {
            return a + b
        }
    }
    let a = ClassA.init(a: 2, b: 3)
    print(a.sum())
    

    相关文章

      网友评论

          本文标题:swift 分类

          本文链接:https://www.haomeiwen.com/subject/diilfqtx.html