質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

993閲覧

protocolに準拠したcellのpropertyを変更する際にcellをletでなくvarで宣言する必要があるのはなぜ?

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/03/19 10:15

編集2020/03/19 10:31

カスタムセルでなくprotocolに準拠させたセルのプロパティを変更するらいにcellvarで宣言しろと言われるのですが、なんででしょうか?

いや、毎回癖でletって書いておこられるので、

swift

1 2// これだとセルをvarで定義しろと怒られる 3let cell = tableView.cellForRow(at: indexPath) as? HogeProtocol 4cell?.hogeProperty = true // <= Cannot assign to property: 'cell' is a 'let' constant 5 // <= Change 'let' to 'var' to make it mutable 6 7// こっちはletでエラーでない 8let cell = tableView.cellForRow(at: indexPath) as? CustomCell 9cell?.hogeProperty = trye 10 11 12class HogeCell: UITableViewCell, HogeProtocol { 13 14 var hogeProperty: Bool = false 15 16} 17 18protocol HogeProtocol { 19 20 var hogeProperty: Bool { get set } 21} 22 23class CustomCell: UITableViewCell { 24 25 var hogeProperty: Bool = false 26} 27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

HogeProtocol が値型なので、let で宣言するとプロパティの変更はできないからです。

以下のように HogeProtocol を @objc 付きで宣言(または、NSObject など @objc 付きのプロパティを継承)すると参照型になり、let でもプロパティの変更ができるようになります。(その代わり、struct を HogeProtocol に適合させることはできなくなります。)

swift

1@objc protocol HogeProtocol { 2// or 3protocol HogeProtocol: NSObject {

値型と参照型については、こちらの記事をお読みください。
参考: Swiftで値型と参照型の違いを理解する - Qiita
参考: Swiftでプロトコル型に対して===演算子を使いたい時の対処法

投稿2020/03/19 10:47

hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/19 11:42

回答ありがとうございます。 hogeProtocolは値型になるんですか。class準拠とかと同じ、参照型にしたいので、NSObject準拠で定義しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問