override:
サブクラス側でベースクラスのメソッドやプロパティを実装しなおす(上書きする)こと。
メソッド
class BaseClass {
func doSomething() {
// なんかする
}
}
class SomeClass : BaseClass {
override func doSomething() {
super.doSomething()
// サブクラス側でなんかする
}
}
プロパティもオーバーライド可能
class BaseClass {
var something : String
}
class SomeClass : BaseClass {
var something : String {
get {
return super.something
}
set {
let value = newValue ...... // do something ...
super.something = value
}
}
}
delegate
- デザインパターンのひとつ。
特徴: - 移譲先を意識する必要がない
- 再利用ができる
- 複数のclassをまたいで処理を行う
実装にあたり必要な3つの要素:
1.プロトコル:任せる処理をメソッドとして定義(delegateメソッド)
protocol ButtonDelegate{
//おとを鳴らす
func audio()
//背景画像を変更する
func backgroundChange()
}
2.処理を任せるクラス:delegateメソッドを使用し処理の流れを記述
class Button{
var delegate: ButtonDelegate? = nil
func click(){
print("Button is clicked")
if let dl = self.delegate{
dl.audio()
dl.bakgroundChange()
}else{
print("donothing")
}
}
}
3.処理を任されるクラス:delegateメソッドを実装。処理をここで実装する(overrideと同じ?)
class Button1: ButtonDelegate{
func audio(){
print("beep")
}
func backgroundChange(){
print("background is changed")
}
}
4.実行処理
let button = Button()
let button1 = Button1()
button.delegate = button1
button.click()
didset:
- 値が更新されたときに呼ばれる