[解決済み] 型の不変値に変異型メンバを使用することはできません。
2022-02-16 13:47:56
質問
以下の構造体があります。
public protocol SuperModel {
// empty protocol
}
struct ModelOne: SuperModel {
struct SubModelOne {
var someVar: Double
var othervar: Double?
}
var sub: SubModelOne?
mutating func setSub(sub: SubModelOne) {
self.sub = sub
}
}
私のクラスでは、この構造体をこのように使いたいのです。
final class SomeClass: SuperClass {
var data: SuperModel
init() {
self.data = ModelOne()
}
func someFunc() {
(self.data as! ModelOne).setSub(ModelOne.SubModelOne(someVar: 2, otherVar: 1))
}
}
以下のエラーが発生します。
Cannot use mutating member on immutable value of type 'ModelOne'
. なぜそうなるのでしょうか、どうすれば解決できるのでしょうか。
どのように解決するのですか?
構造体などの値型に型キャストを適用した場合、成功すれば、イミュータブルな コピー を指定します。
(self.data as! ModelOne) // this is copy of data
キャストする必要がある値を変更する唯一の方法は(私の知る限り)、値を再割り当てすることです(@Sahil Beriが指摘したように、変数を宣言する必要があります)。
func someFunc() {
if var data = data as? ModelOne {
data.setSub(ModelOne.SubModelOne(someVar: 2, otherVar: 1))
self.data = data // you can do this since ModelOne conforms to SuperModel
}
}
関連
-
[解決済み] テスト
-
[解決済み] Xcode 8 シェルスクリプト呼び出しエラー
-
[解決済み] このコンテキストで型検索を行う場合、「メソッド」は曖昧である、Alamofireのエラー
-
スレッド1:シグナルSIGABRTの問題解決
-
[解決済み] Swift 3、Swift 4、それ以降で dispatch_sync, dispatch_async, dispatch_after などはどうすればいいですか?
-
[解決済み] タイプ 'StorageMetadata' の値には、メンバー 'downloadURL' がありません。
-
[解決済み] String型のenumを列挙する方法は?
-
[解決済み] なぜ「Implicitly Unwrapped Optionals」を作るのか、それは値があることを知っていることを意味しているからです。
-
[解決済み】プロパティのゲッターとセッター
-
[解決済み] Swift言語でのエラーハンドリング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】インスタンスメンバを型で使用することができない
-
[解決済み] スウィフト 2: !, ?-" オプション型「...」の値がアンラップされていない"
-
[解決済み] Swift presentViewController
-
[解決済み] Xcode 8 シェルスクリプト呼び出しエラー
-
Swift タイプの表現は、より多くの文脈がないと曖昧である。
-
フォールスルーの使用方法概要
-
[解決済み] Swiftでコアデータを日付(時間だけでなく)でソートする
-
[解決済み] なぜ「Implicitly Unwrapped Optionals」を作るのか、それは値があることを知っていることを意味しているからです。
-
[解決済み] Swiftで乱数を生成する方法とは?
-
[解決済み】Swiftでオブジェクトが与えられた型かどうかを確認する