更改我的操場代碼斯威夫特3,Xcode的建議將類型「錯誤」不符合協議「RawRepresentable」
enum Error: ErrorType {
case NotFound
}
到
enum Error: Error {
case NotFound
}
,但現在我拿到冠軍錯誤,我不知道如何讓枚舉符合該協議。
更改我的操場代碼斯威夫特3,Xcode的建議將類型「錯誤」不符合協議「RawRepresentable」
enum Error: ErrorType {
case NotFound
}
到
enum Error: Error {
case NotFound
}
,但現在我拿到冠軍錯誤,我不知道如何讓枚舉符合該協議。
問題是你已經命名了你的錯誤類型Error
- 它與標準庫Error
協議衝突(因此Swift認爲你有一個循環引用)。
你可以參考斯威夫特Error
協議作爲Swift.Error
爲了消除歧義:
enum Error : Swift.Error {
case NotFound
}
但是,這將意味着你的模塊中Error
任何未來的引用將參考您Error
類型,而不是Swift Error
協議(你將不得不再次消除歧義)。
因此,迄今爲止最簡單的解決方案將簡單地將您的錯誤類型重命名爲更具描述性的內容。
發生此錯誤是因爲您「覆蓋」了Error
這是一個的現有聲明。所以你必須爲你的「錯誤」enum
選擇另一個(可能更具描述性的)名稱。
我也有這個問題,雖然我宣佈我的枚舉具體名稱。
原因是我使用Realm,它有Error
類,這使得Swift.Error
和RealmSwift.Error
之間的混淆。
解決方案是在聲明中指定RealmSwift.Error
。
// before
enum MyError: Error { ... }
// after
enum MyError: Swift.Error { ... }
我在AVCapture會嘗試這一塊,它工作在斯威夫特3 +的iOS 10.使用一個NSError作爲RawValue可能解決什麼哈米什指的是上述關於未來的引用錯誤。
enum Error : Swift.Error {
typealias RawValue = NSError
case failedToAddInput
case failedToAddOutput
case failedToSetVideoOrientation
}
因此,在舊版本中,我不會已經能夠說出我的枚舉錯誤類型,但現在雨燕協議名稱已更改爲錯誤,我不能使用錯誤,對吧? – Shades
@Shades Yup,這是正確的 - 如果您在構建設置(將使用Swift 2.3)中將「使用傳統Swift語言版本」變爲「Yes」,您可以自己嘗試。 – Hamish