これは機能します:
// Conformance to protocol correctly synthesized by compiler
struct MyStruct: Equatable {
}
これはしません:
struct MyStruct {
}
// Doesn't work, even though the extension is in the same file
extension MyStruct: Equatable {
}
エラーは非常に明確です。
「Equatable」の実装は拡張機能で自動的に合成できません
私の懸念は、Swift の提案SE-0185によれば、これを許可する必要があることです。
SE-0185: 合成
Equatable
とHashable
適合
Equatable
ユーザーは、要件を実装するかHashable
実装せずに型を宣言して、自動合成を選択する必要があります。この準拠は、元の型宣言の一部であるか、同じファイル内の拡張機能に含まれている必要があります(拡張機能からプライベートおよびファイルプライベート メンバーにアクセスできるようにするため)。
これは Swift 4.1 ( apple/swift#9619 ) で実装されたと言われています。
ただし、コンパイルしようとすると、前に示したエラーが発生します。私はUbuntu 16.04を使用していますが、私が持っているこれらの2つのバージョンのswiftで失敗します:
Swift version 4.1-dev (LLVM 260a172ffb, Clang cd84be6c42, Swift 05b1b2be7c)
Swift version 4.2-dev (LLVM d30879863e, Clang 041fd44ebe, Swift b08fb12358)
何か不足していますか?