[Objective-C] デリゲートにselfを指定するときにエラー

iOS
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

現象

デリゲートにselfを代入したときにwarningが出る

コード

self.hoge.delegate = self;

エラーメッセージ

Assigning to 'id<HogeDelegate>' from incompatible type 'ViewController'

原因

デリゲート先のクラスで<HogeDelegate>のプロトコルを採用していなかった

@interface ViewController ()    // ここに <HogeDelegate> が不足している
@property (nonatomic, strong) Hoge* hoge;
@end

詳細

デリゲートを使用する際には、デリゲート先(実際に処理を実装する方)で</*デリゲート名*/>の形式で、使用するデリゲートを指定し、「このデリゲートを使いますよ〜」ということを表す必要がある。
そうすることで、デリゲート先でデリゲート元のプロトコルが準拠され、selfHogeDelegate型として利用できるようになり、デリゲート元のメソッドを実装して使用することができる。
(というふうに解釈したのだけれど、果たしてこれはあってるのかしら)

今回は、プロトコルの準拠を明示することを怠っていたため、selfViewController型でしかなく、HogeDelegate型のdelegateとは型が一致せず、warningが出た。

解決策

@interface ViewController () <HogeDelegate>
@property (nonatomic, strong) Hoge* hoge;
@end

参考

コメント