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