Extension が気になったので、それを試しにやってみてのメモ書き
クラスで試す
クラス作成
class Car {
var name : String?
var campany : String = "N/A"
init (name: String) {
self.name = name
}
}
継承
class Beatle : Car {
init(name: String) {
super.init(name: name)
super.campany = "Volkswagen"
}
}
Extension
extension Car {
func drive () -> Bool {
println("\(name) do running.")
return true;
}
}
実行
25> let b = Beatle(name: "My \U+FFF0My \U+FFF0\U+FFEF\U+FFBC")
b: Beatle = {
lldb_expr_0.Car = {
name = "My My "
campany = "Wergen"
}
}
26> b.drive
$R1: () -> Bool =
27>
28> b.drive()
My My do running.
$R2: Bool = true
シェルでは?を書いたら何か壊れた。けど、 Extension して追加したメソッドは、子クラスでも使えた。
Double 型の Extension
型に Extension ができるっぽい。
1>
2> extension Double {
3. var byte: Double { return self }
4. var kb: Double { return self * 1_000.0 }
5. var kbi: Double { return self * 1_024.0 }
6. var mb: Double { return self * (1_000.0 * 1_000.0) }
7. var mbi: Double { return self * (1_024.0 * 1_024.0) }
8. var gb: Double { return self * (1_000.0 * 1_000.0 * 1_000.0) }
9. var gbi: Double { return self * (1_024.0 * 1_024.0 * 1_024.0) }
10. }
11>
12> ( 1000.mb + 1.gb + 24.mb ) / 1.mb
$R1: Double = 2024
定数でやってたことを、Extension でできるようになった。
感想
- わりとさくっと使えるのと、型に Extension ができるようになったのは面白い
- extension などでクラスのプロパティには self.name ではなく name だけでいいってのにハマッタ。