回答編集履歴
1
ついき
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
|
+
という意味になります。
|