美文网首页swift学习笔记
第二十一章 扩展

第二十一章 扩展

作者: 运柱 | 来源:发表于2017-07-21 15:04 被阅读0次

    c++没有extension语法,一般意义而言,c++完成扩展的功能通过继承和组合来实现。

    class Base

    {

        //存在一些属性和方法

    };

    class Derived: public Base

    {

        //添加一些属性和方法

    };

    class A

    {

        //部分属性和功能

    };

    class B

    {

        //部分属性和功能

    };

    class C

    {

        //完成更丰富的功能

    private:

        A a;

        B b;

    };

    swift有专用的扩展语法:

    extension SomeType {

        // 为 SomeType 添加的新功能写到这里

    }

    extension SomeType: SomeProtocol, AnotherProctocol {

        // 协议实现写到这里

    }

    下面是扩展的一些实践

    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")

    let threeFeet = 3.ft

    print("Three feet is \(threeFeet) meters")

    let twoKillometer = 2.km

    let aMarathon = 42.km + 195.m

    print("A marathon is \(aMarathon) meters long")

    struct Size {

        var width = 0.0, height = 0.0

    }

    struct Point {

        var x = 0.0, y = 0.0

    }

    struct Rect {

        var origin = Point()

        var size = Size()

    }

    extension Rect {

        init(center: Point, size: Size) {

            let originX = center.x - size.width / 2

            let originY = center.y - size.height / 2

            self.init(origin: Point(x: originX, y: originY), size: size)

        }

    }

    extension Int {

        func repetitions(task: () -> Void) {

            for _ in 0..<self {

                task()

            }

        }

    }

    3.repetitions {

        print("hello")

    }

    extension Int {

        mutating func square() {

            self = self * self

        }

    }

    var someInt = 3

    someInt.square()

    相关文章

      网友评论

        本文标题:第二十一章 扩展

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