遊び場のコードをSwift 3、Xcodeは変更を提案しました
enum Error: ErrorType {
case NotFound
}
に
enum Error: Error {
case NotFound
}
しかし、タイトルエラーが発生し、列挙型をそのプロトコルに準拠させる方法がわかりません。
問題は、エラータイプにError
という名前を付けたことです。これは、標準ライブラリのError
プロトコルと競合します(したがって、Swiftは循環参照があると見なします)。
明確にするために、Swift Error
プロトコルをSwift.Error
と呼ぶことができます。
enum Error : Swift.Error {
case NotFound
}
しかし、これは、モジュール内のError
への今後の参照は、Swift Error
プロトコル(再度明確にする必要があります)ではなく、yourError
タイプを参照することを意味します) 。
したがって、これまでで最も簡単な解決策は、エラータイプの名前をよりわかりやすい名前に変更することです。
このエラーは、Error
であるprotocol
の既存の宣言を「オーバーライド」しているために発生します。したがって、「エラー」enum
に別の(おそらくよりわかりやすい)名前を選択する必要があります。
列挙型を特定の名前で宣言しましたが、この問題も発生しました。
その理由は、私がRealmを使用していて、Error
クラスがあるため、Swift.Error
とRealmSwift.Error
が混同されているためです。
解決策は、宣言でRealmSwift.Error
を指定することです。
// before
enum MyError: Error { ... }
// after
enum MyError: Swift.Error { ... }
AVCaptureセッションでこのブロックを試しましたが、Swift 3 + iOS 10で動作します。NSErrorをRawValueとして使用すると、Hamishがエラーへの今後の参照に関して上記で参照していた内容に対処できる場合があります。
enum Error : Swift.Error {
typealias RawValue = NSError
case failedToAddInput
case failedToAddOutput
case failedToSetVideoOrientation
}
ファイルの先頭にimport Foundation
を付けるのを忘れたため、このエラーが発生していました。他の誰かに役立つ場合に備えて共有するだけです。