2017-04-05 10 views
5

My Swiftアプリケーションには、MyErrorErrorに準拠した単純なクラスのカスタムエラーシステムがあります。サードパーティのライブラリ(PromiseKit)がこのエラーをNSErrorに変換してからdomainプロパティにアクセスしようとすると、アプリケーションがクラッシュするようになったようです。私自身のコードでは、これを期待どおりに動作させるので、なぜライブラリでクラッシュするのですか?それを扱う正しい方法は何ですか?Swift 3.1:カスタムエラーがドメインプロパティにアクセスするためにNSErrorに変換されるとクラッシュします

Crashed: com.apple.main-thread 
0 libswiftCore.dylib    0x1011d86d8 _hidden#19226_ (__hidden#19178_:1788) 
1 libswiftCore.dylib    0x1011cda3c _hidden#19206_ (__hidden#19447_:4045) 
2 libswiftCore.dylib    0x1011cda3c _hidden#19206_ (__hidden#19447_:4045) 
3 libswiftCore.dylib    0x1011cdc90 swift_getTypeName (__hidden#19406_:1731) 
4 AppName      0x1001dafec specialized (_adHocPrint_unlocked<A, B where ...> (A, Mirror, inout B, isDebugPrint : Bool) ->()).(printTypeName #1)<A, B where ...> (Any.Type) ->() (MyError.swift) 
5 AppName      0x1001db4f0 specialized specialized _adHocPrint_unlocked<A, B where ...> (A, Mirror, inout B, isDebugPrint : Bool) ->() (MyError.swift) 
6 AppName      0x1001dafb4 specialized _debugPrint_unlocked<A, B where ...> (A, inout B) ->() (MyError.swift) 
7 AppName      0x1001dac00 protocol witness for Error._domain.getter in conformance MyError (MyError.swift) 
8 libswiftCore.dylib    0x10104fa14 swift_stdlib_getErrorDomainNSString (__hidden#18979_:140) 
9 libswiftCore.dylib    0x1011f96d8 _hidden#21248_ (__hidden#21275_:440) 
10 PromiseKit      0x100dc7d4c Error.isCancelledError.getter (Error.swift:145) 
+0

あなたのMyErrorにはドメインプロパティが含まれていますか? –

+0

私自身のコードでは、ドメイン値の型名を使用することに戻ります。 – villapossu

+1

http://stackoverflow.com/questions/32981542/declare-trivial-protocol-conformance-for-struct-in-a-framework –

答えて

2

errorCodeerrorDomainにアクセスしようとしているNSErrorするエラーから詠唱中。これらの拡張を追加することで、同じ問題が解決されました。

extension CustomError: LocalizedError { 
    public var errorDescription: String? { 
     return "Some localized description" 
    } 
} 

extension CustomError: CustomNSError { 
    public static var errorDomain: String { 
     return "Some Domain Name" 
    } 
    public var errorCode: Int { 
     return 204 //Should be your custom error code. 
    } 
} 
+0

私は明らかに 'public var _domain'と' public var _code'を実装することで動作させましたが、これにも適切な解決策があることを知っておいてよかったです! – villapossu

関連する問題