🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

800閲覧

SwiftのInt型のソースコードを見たい

moriman

総合スコア615

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/11/15 03:30

Swiftの演算子メソッドなど勉強しております。

独自の型に==演算子を使いたい時は、
その型をEquatableプロトコルに準拠させる必要がある、と。
既存の型(Int型・String型など)については、既に==演算子メソッドの実装(つまりEquatableプロトコルへの準拠)がされているので、プログラマは特に何もすることなく、Int型・String型などの値に対していきなり==演算子を使っても、全く問題ない。

上記のようなことを勉強して、実際ソースコードでInt型の==演算子メソッドの実装部分を見てみようと思ったのですが、該当箇所がどこにあるか見つかりません。
まずInt型(構造体として定義されているらしい)のソースファイルが見つかりません。

どこにアクセスすればよいでしょうか?あるいは該当箇所の探し方など教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

独自の型に==演算子を使いたい時は、その型をEquatableプロトコルに準拠させる必要がある、と

最新のSwiftではすべてのプロパティがEquatableであれば、Equatableに準拠していると示すだけでコンパイル時に自動的に必要コードが生成されるようになっているので自分でEquatableに準拠させることは少ないです。

コードを書かなければバグは発生しませんので、書かなくてよいものは書かないほうが安全です。

もちろん特殊なケースでEquatableに準拠するコードが必要となることはありますのでそれを調べるのは良いことだと思います。


で、Intのソースですが、めちゃくちゃ特殊なので参考にはならないと思われます。

これがIntを含むInteger型の型名などを生成するスクリプトです。
SwiftIntTypes.py

で、これで各種Integer型の定義などが生成されます。
IntegerTypes.swift.gyb

という感じで普通にSwiftで書かれていません。

Int以外のほかをあたったほうがいいですね。
あと、Stringもかなり特殊です。

投稿2019/11/15 06:35

編集2019/11/15 06:36
MasakiHori

総合スコア3391

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moriman

2019/11/16 03:36

回答をいただきましてありがとうございます。 「自動的に必要コードが生成」というのは https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html のEquivalence Operatorsの部分で説明されている「synthesized implementations」 のことですよね? あと自動的に生成されるコードというのは、型の全ての種類のプロパティの値がすべて等しい 場合 (例えばxプロパティ、yプロパティ、zプロパティがあるとすると、その3つすべての値が等しい 2つのインスタンスの比較でtrueを返す) trueを返す演算子メソッドが自動的に生成される、という理解でよいでしょうか? なので==演算子で上記以外の挙動をさせたい時は(例えばxプロパティの値が等しければ、y,zプロパティの値が違っていてもtrueを返す、など)自分で実装、そうでない一般的な挙動を望んでいる場合は 「synthesized implementations」で簡単に記述できますよ、という理解でよいでしょうか?
MasakiHori

2019/11/17 01:52

はい、その通りです
moriman

2019/11/17 05:56

わかりました。ありがとうございました。
guest

0

私もそこまで詳しくないので「確実にコレ!」という回答は出来ないのですが、 Swift Standard Library 内で探したところ下記リンクが回答に近いのではないかと。

https://github.com/apple/swift/blob/master/stdlib/public/core/Integers.swift

投稿2019/11/15 04:26

isaoeka

総合スコア80

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moriman

2019/11/16 01:02

回答をいただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問