前提
Xcode、SwiftでRPGを作っています。
実現したいこと
とある構造体配列を別の構造体配列としてインスタンス生成(もしくはappend)し、片方のプロパティが変更された時にもう片方のプロパティも変更するようにしたい
発生している問題・エラーメッセージ
以下のように構造体配列を二つインスタンス生成し、さらに生成した別の構造体配列にappendしています。
swift
1var myCharacterList = [mainCharacter,sub1Character] 2 // var enemyList = ) 3var enemyList = [CharacterStatus]( 4 name: "スライム", 5 jobClass: "騎士", 6 body: 8, 7 power: 8, 8 dexterity: 8, 9 speed: 8, 10 magic: 8, 11 mind: 8 12 ) 13 14 var allList = [CharacterStatus]() 15 for i in myCharacterList.list { 16 allList.append(i) 17 } 18 for i in enemyList.list { 19 allList.append(i) 20 } 21 22 print ("myCharacterListの最初は\(String(myCharacterList[0].name))") // myCharacterListの最初はたぬき 23 print ("allListの最初は\(String(allList[0].name))") // allListの最初はたぬき 24 allList[0].name = "ねこ" 25 print ("変更後、myCharacterListの最初は\(String(myCharacterList[0].name))") // 変更後、myCharacterListの最初はたぬき 26 print ("変更後、allListの最初は\(String(allList[0].name))") // 変更後、allListの最初はねこ
理想は25行目で「変更後、myCharacterListの最初はねこ」と出ると良いのですが、Swiftの配列は値型のため、もう片方のmyCharacterListに変更が共有されません。
試したこと
下記サイトを拝見し、配列をクラスでラップしてappendする方法も試しましたが、同じ結果になってしまいました。
https://qiita.com/koher/items/2a1a364de98845ac6963
swift
1 class CharacterList { 2 var list: [CharacterStatus] 3 init(list: [CharacterStatus]) { 4 self.list = list 5 } 6 } 7 8 // var myCharacterList = [mainCharacter,sub1Character] 9 var myCharacterList = CharacterList(list: [mainCharacter,sub1Character]) 10 11 // 敵リストを取得 12 // var enemyList = [CharacterStatus]() 13 var enemyList = CharacterList(list: [CharacterStatus( 14 name: "スライム", 15 jobClass: "騎士", 16 body: 8, 17 power: 8, 18 dexterity: 8, 19 speed: 8, 20 magic: 8, 21 mind: 8 22 )]) 23 24 // allListをインスタンス生成し、CharacterListクラスでラップしたCharacterStatusを入れる 25 var allList = CharacterList(list: []) 26 for i in myCharacterList.list { 27 allList.list.append(i) 28 } 29 for i in enemyList.list { 30 allList.list.append(i) 31 } 32 33 // それぞれ変更してみる 34 print ("myCharacterListの最初は\(String(myCharacterList.list[0].name))") 35 print ("allListの最初は\(String(allList.list[0].name))") 36 allList.list[0].name = "ねこ" 37 print ("変更後、myCharacterListの最初は\(String(myCharacterList.list[0].name))") 38 print ("変更後、allListの最初は\(String(allList.list[0].name))")
補足情報(FW/ツールのバージョンなど)
Xcode:Version 14.2
C#でできていた事がSwiftでできず、困っております。
お力添えいただけると嬉しいです。
回答1件
あなたの回答
tips
プレビュー