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

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

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

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

4570閲覧

swiftでのクラスのインスタンスの配列の記述の方法がわからない

14ic158p

総合スコア29

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/03/23 06:57

編集2016/03/23 08:19

Humanクラスに、以下のプロパティとインスタンスメソッドを追加してください。

childrenプロパティ
・Humanクラスのインスタンスの配列
・初期値は空の配列
showChildrenメソッド
・childrenプロパティ配列の全インスタンスの名前と年齢を出力する

という問題が出され、太字の箇所が該当部分なのですが

class Human {
var name: String
var age: Int
var state: String?
###var children:[Human] = []

init(name: String, age: Int) {
self.name = name
self.age = age
print("(self.name)がやってきました")
}

func walk() {
self.state = "walking"
print("(self.name)が歩きます")
}

func sit() {
self.state = "sitting"
print("(self.name)が座ります")
}

func showState() {
if (self.state != nil) {
switch self.state! {
case "walking" :
print("(self.name)は歩いています")
case "sitting" :
print("(self.name)は座っています")
default:
break
}
}
}

func showChildren() {
for child in self.children {
print("(child.name): (child.age)歳")
}

}
}

①var 変数名 : [クラス名] = []でクラスにあるインスタンスの初期値が空の配列ということですか?

②self.プロパティ名で式展開してるのはなぜですか?

以上の2点をお教えいただきたいです。

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

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

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

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

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

14ic158p

2016/03/23 07:36

①var 変数名 : [クラス名] = []でクラスにあるインスタンスの初期値が空の配列ということですか? ②self.プロパティ名で式展開してるのはなぜですか? 以上の2点をお教えいただきたいです。
Stripe

2016/03/23 11:44

「式展開」って、どういう意味ですか?
guest

回答1

0

ベストアンサー

①var 変数名 : [クラス名] = []でクラスにあるインスタンスの初期値が空の配列ということですか?

こちらは空の配列で初期化しているということであっています。

Human型の配列、childrenという変数ですね。

swift

1// children変数初期化いろいろ 2// ※全て同じ事をしています。 3 4var children: [Human] = [] 5var children: Array<Human> = [] 6var children = [Human]() 7var children = Array<Human>() 8var children = [] as [Human] 9var children = [] as Array<Human>

②self.プロパティ名で式展開してるのはなぜですか?

式展開という言い方ではなく、こちらはchildren配列の中身を一つづつfor-in文で取り出していることになります。
そして取り出した変数child(Human型)のプロパティnameとageを出力している事になります。
children配列が空の場合はfor文の中は実行されません。

※ちなみにこの場合self.プロパティ名と書かなくてもselfを省略して以下の様に書けます。

swift

1func showChildren() { 2 for child in children { 3 print("\(child.name): \(child.age)歳") 4 } 5}

上記のクラスを使用するとしたら以下の様になると思います。

swift

1let taro = Human(name: "太郎", age: 30) 2// 太郎がやってきました 3taro.walk() 4// 太郎が歩きます 5taro.sit() 6// 太郎が座ります 7taro.showState() 8// 太郎は座っています 9 10// children変数にHuman型が格納された配列を代入 11taro.children = [Human(name: "二郎", age: 5),Human(name: "三郎", age: 2)] 12taro.showChildren() 13/* 14二郎: 5歳 15三郎: 2歳 16*/

投稿2016/03/23 13:16

_Kentarou

総合スコア8490

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問