3

構造体を辞書のキーとして使用しようとしています。

コードはで機能しますが、画像リンクのようには機能しswift 2ません。swift 3

等価コード:

同等のコード

4

2 に答える 2

4

Hashable プロトコルに準拠する Swift 型は、Equatable プロトコルにも準拠する必要があります。Hashable プロトコルは Equatable プロトコル(ソース)から継承されているためです。そのため、そのエラー メッセージが表示されます。

あなたの質問に関しては、定義した2つの属性を比較できるようにグローバルな == 演算子をオーバーライドしているため、 == 関数をグローバルに宣言する必要があります。Swift 3 では、構造体自体に == を定義することもできますが、静的でなければなりません。

struct Attributes: Hashable {
  var uid: Int
  var size: Size
  var mimeType: mimeType

  var hashValue: Int {
      return uid
  }

  static func ==(lhs: Attributes, rhs: Attributes) -> Bool {
      return lhs.size == rhs.size && lhs.mimeType == rhs.mimeType
  }
}
于 2016-10-01T22:16:42.463 に答える
3

それはSwiftバージョンについてではありません。Swift 2でもエラーが発生します。問題は、グローバル関数でなければならないため、Structの外部==で関数を定義する必要があることです。

于 2016-07-07T10:55:42.053 に答える