> On Jul 5, 2016, at 5:00 PM, Ben Rimmington <m...@benrimmington.com> wrote:
> 
> <https://github.com/apple/swift-evolution/blob/master/proposals/0112-nserror-bridging.md>
> 
> The new protocols could be combined into a single CustomNSError protocol.
> This would mirror the NSError class APIs, which are being customized.

Why is that good? The two primary protocols—LocalizedError and 
RecoverableError—provide a more focused, easy-to-understand experience for 
opting in to specific behavior. CustomNSError is a fallback for “I want to do 
something special with the generated NSError”.

> 
> Instead of using NSError.setUserInfoValueProvider(forDomain:provider:) 
> could you wrap the CustomNSError value inside an NSError subclass?
> 
>       class _CustomNSError: NSError {
> 
>           private let _error: CustomNSError
> 
>           init(_error: CustomNSError) {
>               self._error = _error
>               super.init(
>                   domain:   _error.dynamicType.errorDomain,
>                   code:     _error.errorCode,
>                   userInfo: _error.errorUserInfo)
>           }
> 
>           override var localizedDescription: String {
>               return _error.errorDescription ?? super.localizedDescription
>           }
> 
>           override var localizedFailureReason: String? {
>               return _error.failureReason ?? super.localizedFailureReason
>           }
> 
>           override var localizedRecoverySuggestion: String? {
>               return _error.recoverySuggestion ?? 
> super.localizedRecoverySuggestion
>           }
> 
>           override var localizedRecoveryOptions: [String]? {
>               return _error.recoveryOptions ?? super.localizedRecoveryOptions
>           }
> 
>           override var recoveryAttempter: AnyObject? {
>               if _error.recoveryOptions != nil {
>                   return _NSErrorRecoveryAttempter(error: _error)
>               } else {
>                   return super.recoveryAttempter
>               }
>           }
> 
>           override var helpAnchor: String? {
>               return _error.helpAnchor ?? super.helpAnchor
>           }
>       }

We could, but why? This is precisely what user-info value providers were 
designed for.

        - Doug

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to