[swift-evolution] [Review] SE-0112: Improved NSError Bridging

Ben Rimmington me at benrimmington.com
Tue Jul 5 19:00:38 CDT 2016


The new protocols could be combined into a single CustomNSError protocol.
This would mirror the NSError class APIs, which are being customized.

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
	            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

-- Ben

More information about the swift-evolution mailing list