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

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

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

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

Q&A

解決済

1回答

661閲覧

Swiftコードの宿題

shinya-ta

総合スコア31

Swift

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

0グッド

2クリップ

投稿2020/09/12 05:12

編集2020/09/12 07:56

Swiftを学んでいますが、どうしても解けない宿題がでまして、質問しました。

問1と問2はできましたが、他が分かりません。

どなたか教えて頂きたいです…(涙)

問1 クラスの定義
新しいファイル(PartyBasicStatus.swift)を作成し、以下の変数とメソッドを持つクラスPartyBasicStatus.swiftを定義してください
文字列「name」(初期値は「""」(文字なし))
整数型「hp」(初期値は「0」)
整数型「attack」(初期値は「0」)
整数型「defence」(初期値は「0」)
整数型「attackMagickPower」(初期値は「0」)
文字列配列「skills」(初期値は「[]」(中身のない配列))

import UIKit

class PartyBasicStatus: NSObject {
var name: String = ""
var hp: Int = 0
var attack: Int = 0
var defence: Int = 0
var attackMagickPower: Int = 0
var skills: [String] = []

問2 クラスの継承
問1で作成したPartyBasicStatusを継承して
PaladinStatusクラスを作成し、以下をメソッドを作成してください。

メソッド名:learnSkill
引数:skillName 型は文字
処理内容:
・『「問1で定義したname」は「引数skillName」を覚えた』と表示させる
・skillsに「skillName」を追加する(appendメソッドを使う)

import UIKit

class PaladinStatus: PartyBasicStatus {
var learnSkill: String = "skillName"

func learnSkill(skillName: String){ skills.append(skillName) print("(skillName)を覚えた") }

問3 インスタンス化とメソッドの実装と呼び出し
問2で作成したクラスをインスタンス化し、PaladinStatusクラスのメソッドを使って、以下を表示させて下さい
「ハッサンはにおうだちを覚えた」

問4 メソッドの戻り値(講習では未実施)
以下のメソッドを定義してください。
メソッド名:baikiruto
引数:なし
戻り値:Int型
処理内容:
クラスのattackを2倍にした値を戻り値に設定する

【戻り値があるメソッドの定義の仕方】
func [メソッド名] ([引数]) -> [戻り値の型名] {
処理
return 戻り値
}

問5
問4で作成したメソッドの戻り値をattackに格納する

ここまでしかできません。
分かる方、教えて下さい。

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

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

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

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

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

TsukubaDepot

2020/09/12 05:19

たとえば、問3の設問を次のように分解したとします。 問2で作成した「(1)クラスをインスタンス化」し、「(2)PaladinStatusクラスのメソッドを使って」、「(3)以下を表示」させて下さい (1)から(3)までのうち、どれをご理解いただいていて、どれが不明でしょうか。
miyabi_takatsuk

2020/09/12 05:33

問2の時点で大分ズレてきてますね。 この宿題をやる前に、 クラスとインスタンスに関しては勉強しなかったのですか? 勉強してない部分を宿題にする学校は無いと思うのですが。 (余程意地悪な学校でなければ)
shinya-ta

2020/09/12 05:57

クラスのインスタンス化から先が、一度説明があり、その時は理解してたのですが、日にちが経つと忘れてしまいまして…。 問1はすぐにできましたが、問2からはかなり色々と調べまくって、なんとかこじつけたって感じです…
shinya-ta

2020/09/12 05:59

問3は最初から分かりません…
TakuyaAso

2020/09/12 06:06

基本的なことなので参考書見たらわかるんだろうなと思いました。 検索の仕方も問題あるのかもしれません。
miyabi_takatsuk

2020/09/12 09:19

一度理解できたのであれば、復習すれば思い出せると思いますよ。 ノートもとっていたでしょうし、 まずは復習されてみてはいかがでしょうか? クラスとインスタンスは、 クラスベース言語での基本なので、やれないとこの先逆に厳しくなりますし。
guest

回答1

0

ベストアンサー

前置き

宿題のようなので、構文による答えなどは提示しません。
考え方のヒントなどを回答させていただきます。
自分で答えを導きましょう。

問2に関して

だいぶ勘違いがあるようなので、
おそらく減点を受けるでしょう。

勘違いされている部分は下記です。

  • メソッドどプロパティの違いを理解していない
  • 引数とはなんなのか理解していない

これは、基礎中の基礎なので、しっかり復習を行う、ないし、先生に素直にわかりません、と聞きましょう。

問3に関して

これは、もう復習するか、しっかり調べましょう。

軽くざっくり説明すると、

クラスインスタンスは、よく、設計図実物に例えられることが多いです。
自動車で例えると、
設計図があるからこそ、同じ規格、機能を持った自動車は大量生産が可能になります。
そして、自動車は買い手によって、自身でカスタマイズしていったりして、買い手に適合したものになっていきます。
これをクラスとインスタンスに直すと、
クラスは設計図であり、
プロパティ(自動車で言う規格)やメソッド(自動車でいう機能)を持ちます。
そして、インスタンスは自動車そのものであり、
個々のインスタンス毎でプロパティの値を変えたり(自動車でいう買い手のカスタマイズ)、
メソッドを実行(自動車で言う機能を使う)することができます。
それによって、同じ規格・機能を持ちつつ、インスタンス別で違う状態を作り出せるってことになります。

今回は、RPGを想定したクラス設計のようなので、
職業という親クラスを、継承した、各職業というクラスを用意することによって、
職業クラスがもつ基本の規格と機能を持ちつつ、
(技を覚えること自体という機能)
各職業別に、その職業の名前や、覚える技自体を設定できる、
というクラス設計みたいですね。
その各職業クラスからインスタンスを生成し、実際に使っていくのが、問3というわけですね。

と、これ以上は、宿題の答えそのものになってきそうなので、ここまでにします。

とかく、クラスとインスタンスとはなんなのか?
というのを実際に自身で定義しながら覚える必要があると思います。
クラスベースは多くの言語で採用されている仕様なので、覚えないと、
Swiftどころか、プログラミングをしていくこと自体が困難になるかと。

問4、5に関して

お察しの通り、問3をクリアしないと、解ける問題ではありません。
逆に問3がわかれば、さっくりいけるでしょう。

投稿2020/09/14 02:01

編集2020/09/14 03:17
miyabi_takatsuk

総合スコア9555

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問