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