teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

日本語が変

2019/02/06 00:01

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -14,9 +14,9 @@
14
14
  [https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html](https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html)
15
15
 
16
16
  ---
17
- 質問意図とは外れますが、異なる型の値の集まりをArrayで表現するのは(静的型付けかつ優れた型推論能力を持っている)swift言語では下策に思えます。Arrayは全ての型が共通の場合のコレクションなので型が不一致のものを無理にArrayにまとめてしまうと要素の型がAnyとなってしまい本当はStringとIntの組であるにもかかわらずその型の情報が消えてしまい不必要にキャストを使う羽目になります。
17
+ 質問意図とは外れますが、異なる型の値の集まりをArrayで表現するのは(静的型付けかつ優れた型推論能力を持っている)swift言語では下策に思えます。Arrayは全ての型が共通の場合のコレクションなので型が不一致のものを無理にまとめと要素の型がAnyとなってしまいます。本当はStringとIntの組であるにもかかわらず型の情報が消えてしまいますので不必要にキャストを使う羽目になります。
18
18
 
19
- 一般的になんらかの構造を表現するにはclass/structを用いることが多いと思いますが、コード内のごく狭い範囲でのみ用いるその場限りの構造を一々class/structとして宣言するのは面倒です。そんな場合はArrayではなくTupleを使ったほうがよいと思います。本件の場合なら「二次元配列」ではなく「Tupleの配列」とするわけです。Tupleなら要素の位置ごと(最初の要素、二番目の要素、...)に個別に型を推論してくれますので、本件のようなデータの場合arrayの各要素が「StringとIntの組」であると型推論してくれ型の曖昧性を排除できます。自然、不必要なキャストもなくなります。
19
+ 一般的になんらかの構造を表現するにはclass/structを用いることが多いと思いますが、コード内のごく狭い範囲でのみ用いるその場限りの構造を一々class/structとして宣言するのは面倒です。そんな場合はArrayではなくTupleを使ったほうがよいと思います。本件の場合なら「二次元配列」ではなく「Tupleの配列」とするわけです。Tupleなら要素の位置ごと(最初の要素、二番目の要素、...)に個別に型を推論してくれますので、本件のようなデータの場合だとarrayの各要素が「StringとIntの組」であると型推論してくれ型の曖昧性を排除できます。自然、不必要なキャストもなくなります。
20
20
 
21
21
  ```swift
22
22
  var array = [("長男", 0), ("次男", 7), ("三男", 3), ("四男", 10), ("五男", 5)]