回答編集履歴
1
==が演算子でない、という間違いを訂正。Equatableプロトコルについて追記。
answer
CHANGED
@@ -3,6 +3,6 @@
|
|
3
3
|
Swiftのコンパイラは、型推論をします。ビルド時に、`3`や`"3"`といったリテラルの型を、推定して一つに固定します。このために、いちいちIntは1、Floatは1.0などと書き分けなくてもよくなっています。
|
4
4
|
今回も推定してみたけれど、`3`や"3"の型を特定できなかったので、ambignousというエラーにしているんだと思います。
|
5
5
|
|
6
|
-
余談ですが、`==`
|
6
|
+
余談ですが、`==`演算子の実体は関数です。`3 == "3"`と書いたら、3と"3"を引数にとる`==`関数を探します。"3"はStringかCharactorだろうし、3はIntかFloatかDoubleか、その他いっぱいありますが、どれかに一致する`==`関数があったらそれにします。複数あったらエラーになるかと思いましたが、実際にはならなくて、どれかが使われます。
|
7
7
|
|
8
|
-
関数なので、IntとStringを比較するような`==`関数を作ることも可能です。可能ですが、やらないほうがいいです。余程上手に設計しないと、想定していない動作をするようなコードになってしまい、保守性や可読性が下がると思います。
|
8
|
+
関数なので、IntとStringを比較するような`==`関数を作ることも可能です。可能ですが、やらないほうがいいです。余程上手に設計しないと、想定していない動作をするようなコードになってしまい、保守性や可読性が下がると思います。また、プロトコル指向言語であるSwiftはEquatableというプロトコルを用意していて、それは同じ型のもの同士の比較を前提としています。独自の型についてEquatableに準拠するのは良いアイデアですが、違う型同士の比較をサポートするのは**Swift的でない**と思います。
|