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

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

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

Swift Playgroundは、Swiftをインタラクティブに習得できるiPad向けのアプリケーション。コーディングの知識は一切必要なく、Swift Playgrounds上でプログラミングしたコードによりドローン・ロボットを自在に動かすことが可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1270閲覧

【Swift】クラスとインスタンスでの変数

Yuhara327

総合スコア9

Swift Playground

Swift Playgroundは、Swiftをインタラクティブに習得できるiPad向けのアプリケーション。コーディングの知識は一切必要なく、Swift Playgrounds上でプログラミングしたコードによりドローン・ロボットを自在に動かすことが可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2021/08/11 14:30

編集2021/08/12 02:43

クラスとインスタンスについて学習したので、「名前(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 ~~~~~~~~~~~~~ ^~

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

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

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

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

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

AbeTakashi

2021/08/11 15:17

「次に、「進化」のような関数で、体力と防御力の値をいくらか増やし、また値を表示するというコードを書こうと思った」とのことですが、まずはエラー出て動かなくていいので、ご自分で書いてみてください(質問文を編集して追記してください)。 というのも、イマイチ何をしたいのか、どうしたいのかが文章で上手く伝わってきません。書いたコードを見れば、回答者の人もやろうとしていることがなんとなく伝わりますので、おそらく回答が出てくると思います。
hoshi-takanori

2021/08/11 21:37

とりあえず Monster1.hp += 10 とか Monster1.df += 20 で増やせますし、もう一度 display を呼べば新しい値が表示されると思いますが、オブジェクトのプロパティを外から変更するのはお行儀が良くないので、イニシャライザとかメソッドとか作ることをお勧めします。
Yuhara327

2021/08/12 01:20

申し訳ありません、編集します
hoshi-takanori

2021/08/12 04:55

Evolution の引数の型を Monster にすれば良いような…。 (引数名も monsterNumber じゃなくて monster) ちなみに、Swift では変数や関数の名前の先頭の文字は小文字にするのが一般的です。
Yuhara327

2021/08/12 12:17

ありがとうございます。以後気をつけます!
guest

回答1

0

ベストアンサー

hoshi-takanori さんの指摘どおり

func evolution (monsterNumber: Monster){ monsterNumber.hp += 100 monsterNumber.df += 50 print("(monsterNumber.name!)が進化した") print("HP:(monsterNumber.hp!)") print("DF:(monsterNumber.df!)") } evolution(monsterNumber: Monster1)

とやればplayground上でもエラー出ませんね。ただ、その上でも指摘の通りオブジェクトの外から変更するのはお行儀よくないというのはありますので、単純にやるなら計算型プロパティを追加してsetter/getterを介してhpやdfにアクセスするようにするとより良いでしょうね。もう少し複雑な計算もできるようになりますし。

参考)
https://qiita.com/Julio_iOS/items/6e0f1b5414b7d7e99f9c
https://tea-leaves.jp/swift/content/プロパティ

投稿2021/08/12 07:09

AbeTakashi

総合スコア4512

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

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

Yuhara327

2021/08/12 12:18

ありがとうございます。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問