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

回答編集履歴

1

ついき

2020/02/10 03:20

投稿

MasakiHori
MasakiHori

スコア3400

answer CHANGED
@@ -1,4 +1,29 @@
1
1
  以下のように型制約を指定できます。
2
2
  ```swift
3
3
  extension Array: Container where Element: Equatable {}
4
- ```
4
+ ```
5
+
6
+ ----
7
+ 追記
8
+
9
+ ```swift
10
+ extension Array where Element:Equatable{}
11
+ ```
12
+ はArrayのElementをEquatableに準拠させるという意味ではありません。
13
+
14
+ これは、ArrayのうちElementがEquatableであるもののみに拡張を与えるという宣言です。
15
+
16
+ 例えば
17
+ ```swift
18
+ extension Array where Element: Equatable {
19
+ func allSame() -> Bool {
20
+ guard let e = first else { return true }
21
+ return reduce(true) { $0 ? $1 == e : false } // $1 == e はElementがEquatableでなければ実行不可能
22
+ }
23
+ }
24
+ ```
25
+ のようなElementがEquatableでなければ実行不可能なメソッドの追加などを行う時に利用します。
26
+
27
+ 僕が回答したextensionは
28
+ ArrayのうちElementがEquatableであるもののみをContainerに準拠させる。
29
+ という意味になります。