Hello all,
We are proceeding to update all of our Swift code to Swift 3 now and had a few
questions about the proper way to implement Errors. We need these entities to
be available in Objective-C and they are actively being used in Swift classes
marked as @objc.
I read:
https://github.com/apple/swift-evolution/blob/master/proposals/0112-nserror-bridging.md
<https://github.com/apple/swift-evolution/blob/master/proposals/0112-nserror-bridging.md>
completely and came up with this implementation:
/// The enumeration of the possible error codes in the Foundation error domain
@objc public class FoundationError: NSObject, CustomNSError {
/// The underlying error code
private let code: FoundationError.Code
/// The type of an error code.
@objc public enum Code: Int {
/// An ARCOperationCondition failed during evaluation
case operationConditionFailed = 10000
/// An ARCOperation failed during execution
case operationExecutionFailed = 10001
}
/// The domain of the error.
public static var errorDomain: String {
return "FoundationError"
}
/// The error code within the given domain.
public var errorCode: Int {
return code.rawValue
}
/// The user-info dictionary.
public let errorUserInfo: [String : Any]
/// Initializes a new FoundationError with an empty userInfo dictionary
///
/// - parameter code: one of the available error codes
///
/// - returns: a new instance of FoundationError
public convenience init(code: FoundationError.Code) {
self.init(code: code, userInfo: [:])
}
/// Initializes a new FoundationError with an userInfo dictionary
///
/// - parameter code: one of the available error codes
/// - parameter userInfo: the user-info dictionary
///
/// - returns: a new instance of FoundationError
public init(code: FoundationError.Code, userInfo: [String : Any]) {
self.code = code
errorUserInfo = userInfo
}
/// Computes whether two FoundationErrors are equal
///
/// - parameter object: a FoundationError
///
/// - returns: true, if the two errors are equal
public override func isEqual(_ object: Any?) -> Bool {
guard let object = object as? FoundationError else { return false }
return errorCode == object.errorCode &&
errorUserInfo.keys.elementsEqual(object.errorUserInfo.keys)
}
}
My question is whether this is the correct way to do this now; or is there
another solution we should be doing? We would like to follow Swift Best
Practices here, but unfortunately, the documentation is quite vague on this
subject.
Thanks for your help!
Ronak Patel
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users