構造体を辞書のキーとして使用しようとしています。
コードはで機能しますが、画像リンクのようには機能しswift 2ません。swift 3
等価コード:
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
}
}
それはSwiftバージョンについてではありません。Swift 2でもエラーが発生します。問題は、グローバル関数でなければならないため、Structの外部==で関数を定義する必要があることです。