【完全攻略】Swiftのdelegate(デリゲート)について徹底解説します!【永久保存版】
HTML-код
- Опубликовано: 22 авг 2024
- SwiftによるiPhoneアプリ開発を学んでいく中でつまづきやすいポイントの代表格であるdelegate(デリゲート)について、delegateが解決しようとしている課題・delegateの使い方・delegateの作り方・delegateの具体的な活用方法など、徹底解説していきます!
↓動画内で紹介しているサンプルコードは以下から見ることができます。
github.com/aki...
あきおのTwitter
/ akio0911
【アプリ道場サロン】iOSアプリ開発をテーマとしたサロン - CAMPFIRE (キャンプファイヤー)
community.camp...
#Xcode #Swift #プログラミング
delegateの解説動画を何本かみましたが、この動画が自分には一番分かりやすかったです!
コメントありがとうございます!またぜひお気軽にコメント頂けると嬉しいですー!
何回も試聴してコード書いてなんとなく理解できた気がします!
ほんとに永久保存版ですね。
コメントありがとうございます!理解が進んだということで、とても嬉しいです。
これからも分かりやすい解説動画を作っていけたらと思います。
今後ともよろしくお願いします!
とてもわかりやすかったです🙌
途中で髪色変わって最後には元に戻っているのが収束してる感あってよかったです🙌
複数日にわたって収録したので、途中で髪色が変わってしまいましたw
なかなか理解出来ず、後回しにしていたデリゲートがようやく腑に落ちました。学ぶ姿勢まで優しく伝えてくださり感謝しております。
このRUclipsチャンネルで今後ともどんどん知識をつけていきたいと思いますので、これからも宜しくお願いいたします。
コメントありがとうございます!
お役に立てて良かったです。
またぜひお気軽にコメント頂けると嬉しいですっ!
ありがとうございます、すごくわかりやすかったです!
delegateを使うための書き方自体は理解していたつもりでしたが
具体的に例示していただいたおかげで、何を実現しようとしているのかやっとわかった気がします。
書き方だけ理解してきたせいか、delegateのために用意する変数などに重き置いてきてしまったのですが
動画一通り見させてもらって、Protocolこそが根幹であってとんでもなく大事なのもよくわかりました!
コメントありがとうございます!
書き方だけでなく「なぜこの仕組みが必要なのか?」「この仕組みがないとどういう事態になるのか?」に注目すると、より理解できるようになると思います!
「同じメソッドを持つクラスを同等に扱う仕組み」は、以下のように纏めて、理解できました。
// Delegate Example
// Protcolの宣言
protocol CalculatorDelegate {
func calculate(value1: Int, value2: Int) -> Int
func calculationName() -> String
}
// AdditionCalculatorは、CalculatorDelegateとして扱える(処理をする側)
class AdditionCalculator: CalculatorDelegate {
func calculate(value1: Int, value2: Int) -> Int {
return value1 + value2
}
func calculationName() -> String {
return "足し算"
}
}
// SubtractionCalculatorは、CalculatorDelegateとして扱える(処理をする側)
class SubtractionCalculator: CalculatorDelegate {
func calculate(value1: Int, value2: Int) -> Int {
return value1 - value2
}
func calculationName() -> String {
return "引き算"
}
}
// ResultPrinterのクラス(処理を任せる側)
class ResultPrinter {
// 後から定義できるようにする
var delegate: CalculatorDelegate? = nil
func printResult(value1: Int, value2: Int) {
if let dg = self.delegate {
let name = dg.calculationName()
let result = dg.calculate(value1: value1, value2: value2)
print("\(value1)と\(value2)の\(name)した結果は\(result)です")
} else {
print("何もしません")
}
}
}
// 実際に使ってみる
let rp = ResultPrinter()
rp.printResult(value1: 5, value2: 5)
let rp1 = ResultPrinter()
let calc1 = AdditionCalculator()
rp1.delegate = calc1
rp1.printResult(value1: 5, value2: 5)
let rp2 = ResultPrinter()
let calc2 = SubtractionCalculator()
rp2.delegate = calc2
rp2.printResult(value1: 5, value2: 5)
// 結果
/*
何もしません
5と5の足し算した結果は10です
5と5の引き算した結果は0です
*/
// -----------------------------------
// Delegateの利点 : 同じ仕掛けを使い回せる
// -----------------------------------
// MaltiplicationCalculatorは、CalculatorDelegateとして扱える
class MaltiplicationCalculator: CalculatorDelegate {
func calculate(value1: Int, value2: Int) -> Int {
return value1 * value2
}
func calculationName() -> String {
return "掛け算"
}
}
// 実際に使ってみる
let rp3 = ResultPrinter()
let calc3 = MaltiplicationCalculator()
rp3.delegate = calc3
rp3.printResult(value1: 5, value2: 5)
// 結果
/*
5と5の掛け算した結果は25です
*/
良いですね!他にもdelegateを使ってコードを書いてみると良いと思います!
変数には同じクラスのインスタンスしかセットできない、なるほどこの課題があったのかー
です!protocolを使うとその問題を解決できます!
動画を見ての感想や質問など、お気軽にコメント頂けると嬉しいですっ!