クラスとインスタンスについて学習したので、「名前(name)」「体力(hp)」「防御力(df)」の3変数を持ち、値を表示するというクラスを作りました。
#####作りたい物
任意のインスタンスのhpとdfに数を足して表示したい
書いてみたこと
インスタンス名を受け取り、インスタンス名.hpに+100,インスタンス名.dfに+50して表示する関数という形で書いてみました。よろしくお願いします。
下がエラーメッセージです。
swift
1class Monster { 2 var name: String! 3 var hp: Int! 4 var df: Int! 5 func display() { 6 print("(name!)が現れた") 7 print("HP:(hp!)") 8 print("DF:(df!)") 9 } 10} 11let Monster1 = Monster() 12Monster1.name = "slime" 13Monster1.hp = 50 14Monster1.df = 100 15Monster1.display() 16 17let Monster2 = Monster() 18Monster2.name = "killerMachine" 19Monster2.hp = 200 20Monster2.df = 100 21Monster2.display() 22 23func Evolution (monsterNumber: String){ 24 monsterNumber.hp += 100 25 monsterNumber.df += 50 26 print("(monsterNumber.name!)が進化した") 27 print("HP:(monsterNumber.hp!)") 28 print("DF:(monsterNumber.df!)") 29} 30Evolution(monsterNumber: Monster1) 31
Error
1Playground execution failed: 2 3error: TestField.playground:30:26: error: cannot convert value of type 'Monster' to expected argument type 'String' 4Evolution(monsterNumber: Monster1) 5 ^ 6 7error: TestField.playground:24:19: error: value of type 'String' has no member 'hp' 8 monsterNumber.hp += 100 9 ~~~~~~~~~~~~~ ^~ 10 11error: TestField.playground:25:19: error: value of type 'String' has no member 'df' 12 monsterNumber.df += 50 13 ~~~~~~~~~~~~~ ^~ 14 15error: TestField.playground:26:28: error: value of type 'String' has no member 'name' 16 print("(monsterNumber.name!)が進化した") 17 18error: TestField.playground:27:31: error: value of type 'String' has no member 'hp' 19 print("HP:(monsterNumber.hp!)") 20 ~~~~~~~~~~~~~ ^~ 21 22error: TestField.playground:28:31: error: value of type 'String' has no member 'df' 23 print("DF:(monsterNumber.df!)") 24 ~~~~~~~~~~~~~ ^~
「次に、「進化」のような関数で、体力と防御力の値をいくらか増やし、また値を表示するというコードを書こうと思った」とのことですが、まずはエラー出て動かなくていいので、ご自分で書いてみてください(質問文を編集して追記してください)。
というのも、イマイチ何をしたいのか、どうしたいのかが文章で上手く伝わってきません。書いたコードを見れば、回答者の人もやろうとしていることがなんとなく伝わりますので、おそらく回答が出てくると思います。
とりあえず Monster1.hp += 10 とか Monster1.df += 20 で増やせますし、もう一度 display を呼べば新しい値が表示されると思いますが、オブジェクトのプロパティを外から変更するのはお行儀が良くないので、イニシャライザとかメソッドとか作ることをお勧めします。
申し訳ありません、編集します
Evolution の引数の型を Monster にすれば良いような…。 (引数名も monsterNumber じゃなくて monster)
ちなみに、Swift では変数や関数の名前の先頭の文字は小文字にするのが一般的です。
ありがとうございます。以後気をつけます!
回答1件
あなたの回答
tips
プレビュー