回答編集履歴
4
修正
answer
CHANGED
@@ -16,7 +16,9 @@
|
|
16
16
|
let anyTypeArray: [Any] = [1, "string", 100000.5]
|
17
17
|
```
|
18
18
|
|
19
|
-
こんな風に色々な型の値が入った配列も作れてしまいます。この配列の中の値は全てAny型の値なため実際は何型なのか分かりません。配列の中身が何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
|
19
|
+
こんな風に色々な型の値が入った配列も作れてしまいます。この配列の中の値は~~全てAny型の値なため実際は何型なのか分かりません。配列の中身が何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。~~
|
20
|
+
(fuzzballさんのコメントを受けて再度修正です)
|
21
|
+
anyTypeArrayの中身を添字で取り出した時、anyTypeArray[0]はInt型、anyTypeArray[1]はString型、anyTypeArray[2]はDouble型の値となります。ただanyTypeArrayの中身を取り出すまで何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
|
20
22
|
|
21
23
|
一方タプルでは
|
22
24
|
|
3
修正
answer
CHANGED
@@ -48,8 +48,8 @@
|
|
48
48
|
```swift
|
49
49
|
let anyTypeArray: [Any] = [1, "string", 100000.5]
|
50
50
|
let tuple = (100, "hoge", 5.5)
|
51
|
-
print(anyTypeArray[0] //1
|
51
|
+
print(anyTypeArray[0] //1
|
52
|
-
print(tuple.0) //100
|
52
|
+
print(tuple.0) //100
|
53
53
|
```
|
54
54
|
|
55
55
|
こんな感じで取り出せます。
|
2
修正
answer
CHANGED
@@ -1,24 +1,59 @@
|
|
1
|
-
|
1
|
+
(以下fuzzballさんのアドバイスを受けてからの修正回答になります)
|
2
2
|
|
3
|
+
タプルと配列を比較してメリットデメリットをみていきます。
|
4
|
+
|
5
|
+
が、最初に特殊なAny型について少々説明をします。
|
6
|
+
Swiftには色々な型がありますが特殊な型としてAny型というものがあります。このAny型で宣言された変数や定数はどんな型の値でも入れられるようになります。ですがどんな値でも入れられる、ということは危険性も孕んでおり中身が何なのかが簡単には分からない、という反面も持ち合わせています。ですのでこんなことも可能です。
|
3
7
|
```swift
|
8
|
+
var anyTypeValue: Any = 1
|
4
|
-
|
9
|
+
anyTypeValue = "String"
|
5
|
-
let stringArray: [String] = ["hoge hoge", "foo", "bar"]
|
6
|
-
|
10
|
+
anyTypeValue = 10.5
|
7
11
|
```
|
8
12
|
|
9
|
-
配列は特定の型を限定して入れられるのに対してタプルは型を限定せずに入れられます。
|
10
|
-
|
13
|
+
このAny型を使った配列というのもあり
|
11
|
-
配列操作とは```.enumarated```や```.map```、```.foreach```等配列の中身各々に対して何らかの操作を行うものです。詳しくは配列操作で検索すれば色々出てきます。
|
12
14
|
|
15
|
+
```swift
|
16
|
+
let anyTypeArray: [Any] = [1, "string", 100000.5]
|
17
|
+
```
|
18
|
+
|
19
|
+
こんな風に色々な型の値が入った配列も作れてしまいます。この配列の中の値は全てAny型の値なため実際は何型なのか分かりません。配列の中身が何型か分からない、ということはこの配列を扱うのが難しい、というデメリットにつながります。
|
20
|
+
|
21
|
+
一方タプルでは
|
22
|
+
|
23
|
+
```swift
|
24
|
+
let tuple = (100, "hoge", 5.5)
|
25
|
+
```
|
26
|
+
|
27
|
+
色々な型の値が入ったタプルというものが簡単に出来ます。こちらはタプルの中の値の型はわかっており、上記の例だとInt, String, Double型になります。
|
28
|
+
ここでfuzzballさんのコメントを引用させていただくと
|
29
|
+
|
30
|
+
> ・タプルは「違う型で複数の値を格納」するのが簡単
|
31
|
+
|
32
|
+
と言えます。これがタプルのメリットです。
|
33
|
+
|
34
|
+
また配列は配列操作を行えますが、タプルではそれができません。
|
35
|
+
配列操作とは```.enumarated```や```.map```、```.foreach```等配列の中身各々に対して何らかの操作を行うものです。詳しくは配列操作で検索すれば色々出てきますので割愛させていただきます。
|
36
|
+
|
13
37
|
下記は一例です。
|
14
38
|
|
15
39
|
```swift
|
16
|
-
stringArray.map{print($0)} //OK
|
40
|
+
stringArray.map{print($0)} //OK この$0はstringArrayの配列の中身一つ一つを表しています。
|
17
41
|
tuple.map{print($0)} //NG
|
18
42
|
```
|
19
43
|
|
20
|
-
配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。
|
44
|
+
配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。これは配列が配列である大きなメリットです。
|
21
45
|
|
46
|
+
タプルと配列の似ている点として、どちらも(雑な表現ですが)数字を使って取り出すことができます。上記の二例をここでまた引っ張り出しますが
|
47
|
+
|
48
|
+
```swift
|
49
|
+
let anyTypeArray: [Any] = [1, "string", 100000.5]
|
50
|
+
let tuple = (100, "hoge", 5.5)
|
51
|
+
print(anyTypeArray[0] //1 こちらは添字で
|
52
|
+
print(tuple.0) //100 こちらはindexで
|
53
|
+
```
|
54
|
+
|
55
|
+
こんな感じで取り出せます。
|
56
|
+
|
22
57
|
また両方のメリットを享受するために
|
23
58
|
|
24
59
|
```swift
|
1
修正
answer
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
```swift
|
16
16
|
stringArray.map{print($0)} //OK
|
17
17
|
tuple.map{print($0)} //NG
|
18
|
+
```
|
18
19
|
|
19
20
|
配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。
|
20
21
|
|