第二十一章 擴(kuò)展

c++沒(méi)有extension語(yǔ)法,一般意義而言,c++完成擴(kuò)展的功能通過(guò)繼承和組合來(lái)實(shí)現(xiàn)。

class Base

{

? ? //存在一些屬性和方法

};

class Derived: public Base

{

? ? //添加一些屬性和方法

};

class A

{

? ? //部分屬性和功能

};

class B

{

? ? //部分屬性和功能

};

class C

{

? ? //完成更豐富的功能

private:

? ? A a;

? ? B b;

};

swift有專(zhuān)用的擴(kuò)展語(yǔ)法:

extension SomeType {

? ? // 為 SomeType 添加的新功能寫(xiě)到這里

}

extension SomeType: SomeProtocol, AnotherProctocol {

? ? // 協(xié)議實(shí)現(xiàn)寫(xiě)到這里

}

下面是擴(kuò)展的一些實(shí)踐

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語(yǔ)閱讀 4,096評(píng)論 0 6
  • 132.轉(zhuǎn)換錯(cuò)誤成可選值 通過(guò)轉(zhuǎn)換錯(cuò)誤成一個(gè)可選值,你可以使用 try? 來(lái)處理錯(cuò)誤。當(dāng)執(zhí)行try?表達(dá)式時(shí),如果...
    無(wú)灃閱讀 1,430評(píng)論 0 3
  • 隨著移動(dòng)互聯(lián)網(wǎng)的興起,海量的終端帶來(lái)的是數(shù)據(jù)量的飛速增長(zhǎng),對(duì)于存儲(chǔ)的需求也隨之增長(zhǎng);隨之引發(fā)的接口響應(yīng)率等問(wèn)題也不...
    locoder閱讀 34,542評(píng)論 1 12

友情鏈接更多精彩內(nèi)容