Swiftのextension
from Swiftのclass
クラス、構造体、列挙型などを拡張することができる
SwiftのProtocolの拡張もできる
クラス、構造体、列挙型をprotocolに適合させることができる
もしかして、Haskellの型クラスとかRustのTraitみたいなやつ?
クラス、構造体、列挙型などを拡張することができる
もっと具体的にいうと、既存のクラスに新しくmethodを生やすことができる?
prototype的な?
これが有効なスコープはどこ?
それがわからないと、既存のクラスに直接定義を増やすのこととの違いがわからん
もしくは、標準ライブラリとか自作でないものに対してのみ使う?
継承とは異なり新しいクラスを定義したりはしない
overrideもない
ないってできないって意味?
code:swift
extension Bool {
var number: Int { return self ? 1 : 0 }
}
where句を使うことで型成約をつけることもできる ref
ますます型クラスっぽい
code:swift
extension Array where Element == Int {
func sum() -> Int {
return reduce(0, +)
}
}
SwiftのProtocolの拡張もできる
protocol extension
https://qiita.com/crea/items/4297bf60d222d661498f#用法2-プロトコル拡張protocol-extension
Rustのstructにimplでmethodを生やすやつとほぼ同じだmrsekut.icon
例 ref
code:swift
protocol Party {
var name: String { get }
var lv: Int { get }
var HP: Int { get }
}
extension Party {
var info: String {
return "名前: \(name), レベル: \(lv), HP: \(HP)"
}
}
例えばprotocolに対し、デフォルト実装を用意しておける
code:swift
// Animalはprotcol
extension Animal {
func bark() -> String {
return "吠えた!"
}
}
これにもwhere句による制限がある
クラス、構造体、列挙型をprotocolに適合させることができるらしい
いみふ
参考
https://qiita.com/crea/items/4297bf60d222d661498f