20代 / 独身 / 会社員

デリゲートにselfを指定するときにエラー

下記URLに移転しました。 5秒後に自動的にリダイレクトします

現象

デリゲートに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

参考

複数の変数に同じ値を代入する(同時代入)

下記URLに移転しました。 5秒後に自動的にリダイレクトします

背景

複数の値に同時に代入したいことがたまにある。
(その行為が妥当かどうなのかは置いておいて)

普通に

a = 0;
b = 0;

とすればよいのだけれど、 どうせならもっとスマートな書き方を知っておこうということで調べてみた結果をまとめる。


結論

a = b = 0;

どの言語もだいたい上記のような書き方で宣言できる。

「代入」はそもそも「式」なので、一文で記入した場合、右から評価される。 それゆえ、このような書き方ですべての変数に代入することが可能となる。


言語ごとの違い

C / C++ / C# / Objective-C

int a,b;
a = b = 0;
int a = 0, b = 0;

※ 以下のようにすると、bにのみ0が代入される

int a, b = 0;

JavaScript

var a = b = 0;

※ 上記の場合、aはローカル変数、bはグローバル変数となる

PHP

<? php
$a = $b = 0;

Python

// マルチターゲット代入
a = b = 0;

// アンパック代入
a, b = 0, 0;
a, b = 1, 2;  // ※

※アンパック代入では一括で違う値も代入可能(さすが)

VBA

無理


他にもわかったら追記します

数独にはまった

下記URLに移転しました。 5秒後に自動的にリダイレクトします

毎日、通勤の電車内と、昼休みまでも、ずっと数独ばかりやっている。 昼休み、今までブランケットと枕を持ち込んで会社で堂々と昼寝をしていたのに、その私が、最近は起きて数独をやっている。


思えば私は熱しやすく冷めやすい性質がある。 数独も、今までの人生で何度かはまって熱中していた時期があったが、そういえば今思えばいつの間にかやらなくなっていた。 他にも、スパイダーソリティアマインスイーパもすごくはまっていた時期があった。

おそらく今回の数独ブームもあっという間に過ぎ去るだろう。 それはそれで、たかが一つの暇つぶしゲームに対する小さなブームだから、問題ない。

ただ、この熱しやすく冷めやすい性格、それ自体は見直さなければならないと思う。 一度冷めてしまうとしばらく冷めっぱなしなことも多々あるため、このままだと、物事も深くは追求できない私の悪い部分がなかなか直らない。 それに何より、人付き合いにおいても、熱されて近づき、冷めて離れてしまうようだと、良い付き合いにはならない。 思い当たる節がたくさんある。


気をつけなければ。 と、数独一つとって、深く反省した。

しかし、すぐ冷めてしまう性格はどうしたら直せるのかなぁ…

広告を非表示にする

黒ごまとかるがも

下記URLに移転しました。 5秒後に自動的にリダイレクトします

タイトルには全く意味がありません。 KUROGOMAとKARUGAMOって子音が一緒だな、と思って(KRGM)。

このご時世に、この中途半端な時期に、ブログを始めてみることにしました。 1月1日にも同じことを考え、しかしどうせ3日坊主になるだろうしやめよう、と結論づけたばかりなのですが…

始めるも自由、辞めるも自由ということで、(炎上しない程度に(炎上するネタもない))自由にやってみようと思います。

思ったことを人に伝えること、そもそも物事についての考えをめぐらすことが苦手なので、 すこしでも練習になれば、始めた意味もあるのかな、と思います。

とりあえずは、思ったこと、感じたこと、学んだこと、やったこと、雑多に記録してみます。

広告を非表示にする