The documentation of the new bridge function with the error is not yet clear enough, so in the near future this answer may be needed for some updates, but according to SE-0112 and the latest Swift source code , you may need to use LocalizedError
rather than Error
and implement errorDescription
.
class MyError: NSObject, LocalizedError { var desc = "" init(str: String) { desc = str } override var description: String { get { return "MyError: \(desc)" } } //You need to implement `errorDescription`, not `localizedDescription`. var errorDescription: String? { get { return self.description } } } func test_my_code() { let error = MyError(str: "my test string") let x = error as Error print(x.localizedDescription) } test_my_code() //->MyError: my test string
Besides using LocalizedError
, this default implementation works:
(NSError.swift, link shown above)
public extension Error {
It's a bit complicated how Swift defines _domain
or _code
from arbitrary types that only match Error
, but it seems that NSError
generates "Operation could not be completed ..." for unknown combinations of domain and code.
source share