回答編集履歴

4

修正

2018/08/31 09:40

投稿

xAxis
xAxis

スコア1349

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

修正

2018/08/31 09:40

投稿

xAxis
xAxis

スコア1349

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 こちらはindexで
103
+ print(tuple.0) //100
104
104
 
105
105
  ```
106
106
 

2

修正

2018/08/31 09:16

投稿

xAxis
xAxis

スコア1349

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
- 前提:Any型は今回扱ません。
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 IntArray: [Int] = [1, 2, 3, 4, 5]
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

修正

2018/08/31 09:15

投稿

xAxis
xAxis

スコア1349

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
  配列操作はいくつかを連続して行うこと出来、一つの操作が終わった結果をいちいち定数や変数に入れる必要がありません。