1. ホーム
  2. swift

[解決済み] なぜ "weak "というキーワードは、クラスおよびクラスバインドプロトコル型にのみ適用できるのですか?

2023-07-16 01:14:13

疑問点

変数を weak として宣言しているとき、Xcodeから時々エラーメッセージが表示されます。

'weak'はクラスとクラスにバインドされたプロトコルタイプにのみ適用されるかもしれません。

または

'weak' はクラスバウンドしない 'SomeProtocol' に適用してはいけません。クラスバウンドするプロトコル適合性を追加することを検討してください。

私はなぜキーワード weak はクラスおよびクラスにバインドされたプロトコル・タイプにのみ適用されるのでしょうか?この要求の背景にはどのような理由があるのでしょうか?

どのように解決するのですか?

weak は参照型のための修飾子です(値型とは対照的に struct や組み込みの値型とは異なります)。

参照型では、同じオブジェクトに複数の参照を持たせることができます。オブジェクトは最後の強い参照がそれを参照するのを止めると、割り当て解除されます(弱い参照はカウントされません)。

一方、値型はコピーによって割り当てられます。参照カウントは適用されないので weak 修飾子は意味を持ちません。