Swift 3のAny、Hashable、AnyHashableの違いは何ですか?

technerd

上記の3つの用語の違いを理解し、新しい用語type erasedコンテナを見つけるために、たくさんのチュートリアルに頭を悩ませていますが、今では混乱します。それは多くの疑問を提起します。

Swiftが導入するのはなぜAnyHashableですか?

これらの3つの用語の根本的な違いは何ですか?

違いAnyAnyHashable

違いHashableAnyHashable

いつHashable使用するAnyHashable、いつ使用するか?

最後になりましたが、最も紛らわしいのtype erasedは、文脈における用語の意味は何AnyHashableですか?

コンテキストとして、私はSwift Evolution ProposalSE-0131に従いました

スイーパー

それらの違いよりも、それらが何であるかを理解することが重要です。

Any迅速な列挙型、タプル、クロージャ、構造体、クラス、プロトコルなど、あらゆるものを意味します。すべてのタイプは、タイプの変数に割り当てることができますAny

Hashable「このオブジェクトはハッシュ可能、つまりハッシュコードがある」というプロトコルです。オブジェクトをハッシュできる場合は、このプロトコルを実装します。これは、多くのデータ構造(つまり、辞書とセット)がそれを必要とするためです。

それで、何AnyHashableですか?

通常、これを行おうとすると:

let a: Set<Hashable>?

コンパイルされません。これはあるHashableから継承Equatable含まれていますSelf

ここで、Objective-Cからswiftにメソッドを移植するとします。そのメソッドは、タイプのパラメーターを取りますNSSetSwiftでは、これはに変わりSetますが、その一般的なパラメーターは何ですか?sの場合と同じAnyように配置するとNSArraySetのオブジェクトはハッシュ可能でなければならないため、機能しませんしかし、一般的な制約としてのみ使用できるSet<Hashable>ため、これも機能しませんHashable彼らはラップ理由ですHashableAnyHashableそのていない使用Selfなどの一般的なパラメータとして使用することができます。

「タイプ消去」の意味について:

持つSelfプロトコルでは、種類のものであるジェネリックパラメータとプロトコルのような、そして一般的なパラメータは、常に準拠するクラスです。これにより、Set<Hashable>「一般的なパラメータ」が不明であるため、プロトコルを単独で使用できなくなりますAnyHashableまったく使用Selfないことこの問題を解決するため、通常の構造体になります。ジェネリックSelf型を「消去」します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

swift 3.0 Swift 3の「Any」の「AnyHashable」タイプにアクセスするにはどうすればよいですか?

分類Dev

SwiftでのHashableとEquatableの使用は何ですか?いつどちらを使うの?

分類Dev

SwiftのErrorとNSErrorの違いは何ですか?

分類Dev

SwiftのErrorとNSErrorの違いは何ですか?

分類Dev

SwiftのErrorとNSErrorの違いは何ですか?

分類Dev

SwiftのIntとInt32の違いは何ですか?

分類Dev

SwiftのNSDictionaryとDictionaryの違いは何ですか?

分類Dev

swiftのSequenceTypeとCollectionTypeの違いは何ですか?

分類Dev

SwiftのArray <T>、ContiguousArray <T>、ArraySlice <T>の違いは何ですか?

分類Dev

[NSObject:AnyObject]とSwiftのAnyObjectの違いは何ですか

分類Dev

Swiftの構造体とtypealiasの違いは何ですか?

分類Dev

SwiftのNSURLRequestとURLRequestの違いは何ですか?

分類Dev

Swiftの `ifvar`と` if let`の違いは何ですか?

分類Dev

Swiftの&<<演算子と<<演算子の違いは何ですか?

分類Dev

Swiftのfunctionとfunction(_ :)の違いは何ですか?

分類Dev

Swiftの `didset`と` willset`の違いは何ですか?

分類Dev

Swiftの `Int ...`と `[Int]`の違いは何ですか?

分類Dev

以下のswiftのクロージャの構文の違いは何ですか

分類Dev

Dictionary <AnyHashable:Any>ここでAnyはSwift3でnil値を保持できます

分類Dev

Swift 3の同等性は何ですか

分類Dev

SpriteKitとSwiftのSKSpriteNodesのsetScaleとサイズの違いは何ですか?

分類Dev

SwiftのNSIndexPathの行とセクションの違いは何ですか?

分類Dev

Swift 3のhttpリクエストとレスポンスが間違っているのは何ですか

分類Dev

Swiftでのスローとリスローの違いは何ですか?

分類Dev

JSONSerializationとJSONDecoderをSwiftで使用することの違いは何ですか?

分類Dev

Swiftの関数とメソッドの違いは何ですか?

分類Dev

Swiftの静的関数とクラス関数の違いは何ですか?

分類Dev

SwiftのExtensionfunc、Extension static func、Extension class funcの違いは何ですか?

分類Dev

Swiftの `!myValue.isEmpty`と` myValue.isEmpty == false`の違いは何ですか?

Related 関連記事

  1. 1

    swift 3.0 Swift 3の「Any」の「AnyHashable」タイプにアクセスするにはどうすればよいですか?

  2. 2

    SwiftでのHashableとEquatableの使用は何ですか?いつどちらを使うの?

  3. 3

    SwiftのErrorとNSErrorの違いは何ですか?

  4. 4

    SwiftのErrorとNSErrorの違いは何ですか?

  5. 5

    SwiftのErrorとNSErrorの違いは何ですか?

  6. 6

    SwiftのIntとInt32の違いは何ですか?

  7. 7

    SwiftのNSDictionaryとDictionaryの違いは何ですか?

  8. 8

    swiftのSequenceTypeとCollectionTypeの違いは何ですか?

  9. 9

    SwiftのArray <T>、ContiguousArray <T>、ArraySlice <T>の違いは何ですか?

  10. 10

    [NSObject:AnyObject]とSwiftのAnyObjectの違いは何ですか

  11. 11

    Swiftの構造体とtypealiasの違いは何ですか?

  12. 12

    SwiftのNSURLRequestとURLRequestの違いは何ですか?

  13. 13

    Swiftの `ifvar`と` if let`の違いは何ですか?

  14. 14

    Swiftの&<<演算子と<<演算子の違いは何ですか?

  15. 15

    Swiftのfunctionとfunction(_ :)の違いは何ですか?

  16. 16

    Swiftの `didset`と` willset`の違いは何ですか?

  17. 17

    Swiftの `Int ...`と `[Int]`の違いは何ですか?

  18. 18

    以下のswiftのクロージャの構文の違いは何ですか

  19. 19

    Dictionary <AnyHashable:Any>ここでAnyはSwift3でnil値を保持できます

  20. 20

    Swift 3の同等性は何ですか

  21. 21

    SpriteKitとSwiftのSKSpriteNodesのsetScaleとサイズの違いは何ですか?

  22. 22

    SwiftのNSIndexPathの行とセクションの違いは何ですか?

  23. 23

    Swift 3のhttpリクエストとレスポンスが間違っているのは何ですか

  24. 24

    Swiftでのスローとリスローの違いは何ですか?

  25. 25

    JSONSerializationとJSONDecoderをSwiftで使用することの違いは何ですか?

  26. 26

    Swiftの関数とメソッドの違いは何ですか?

  27. 27

    Swiftの静的関数とクラス関数の違いは何ですか?

  28. 28

    SwiftのExtensionfunc、Extension static func、Extension class funcの違いは何ですか?

  29. 29

    Swiftの `!myValue.isEmpty`と` myValue.isEmpty == false`の違いは何ですか?

ホットタグ

アーカイブ