在Swift中的错误协议

21 浏览
0 Comments

在Swift中的错误协议

我正在使用Swift 3语法定义一个自定义错误类型,并且我希望通过Error对象的localizedDescription属性提供一个用户友好的错误描述。我该如何做呢?

public enum MyError: Error {

case customError

var localizedDescription: String {

switch self {

case .customError:

return NSLocalizedString("一个用户友好的错误描述。", comment: "我的错误")

}

}

}

let error: Error = MyError.customError

error.localizedDescription

// "操作无法完成。(MyError错误0。)"

localizedDescription是否有办法返回我的自定义错误描述("一个用户友好的错误描述。")?请注意,这里的错误对象是Error类型而不是MyError类型。当然,我可以将对象转换为MyError类型

(error as? MyError)?.localizedDescription

但是否有办法使其在不进行类型转换的情况下工作?

0
0 Comments

在Swift中,为了向Objective-C提供额外的信息,现在有两个错误采用的协议可以被你的错误类型采用,它们分别是LocalizedError和CustomNSError。下面是一个采用了这两个协议的示例错误:

enum MyBetterError : CustomNSError, LocalizedError {

case oops

// domain

static var errorDomain : String { return "MyDomain" }

// code

var errorCode : Int { return -666 }

// userInfo

var errorUserInfo: [String : Any] { return ["Hey":"Ho"] };

// localizedDescription

var errorDescription: String? { return "This sucks" }

// localizedFailureReason

var failureReason: String? { return "Because it sucks" }

// localizedRecoverySuggestion

var recoverySuggestion: String? { return "Give up" }

}

这段代码定义了一个名为MyBetterError的枚举类型,它采用了CustomNSError和LocalizedError两个协议。首先,它定义了一个静态的errorDomain属性,用于指定错误的域。然后,它定义了一个errorCode属性,用于指定错误的代码。接下来,它定义了一个errorUserInfo属性,用于提供错误的用户信息。然后,它定义了一个errorDescription属性,用于提供错误的本地化描述。接着,它定义了一个failureReason属性,用于提供错误的本地化原因。最后,它定义了一个recoverySuggestion属性,用于提供错误的本地化恢复建议。

以上就是采用了CustomNSError和LocalizedError两个协议的错误的定义示例。这些协议提供了一种在Swift中定义错误时为Objective-C提供额外信息的方法。通过采用这些协议,你可以方便地为你的错误类型提供本地化描述、原因和恢复建议等信息,从而提高错误处理的灵活性和可读性。

0
0 Comments

错误协议在Swift中的原因是为了处理和传递错误信息。当程序执行过程中发生错误时,可以使用错误协议来捕获和处理错误信息,以便程序能够提供相应的错误处理逻辑。

在上述代码中,我们定义了一个名为NetworkError的枚举类型,并遵循了LocalizedError协议。该枚举类型有一个case,即responseStatusError,它接受两个参数:status和message。这表示当网络请求返回错误状态时,可以使用responseStatusError来表示具体的错误信息。

为了能够在本地化描述中使用这些参数,我们可以通过扩展NetworkError来实现errorDescription属性。在该属性的实现中,我们使用了switch语句来根据不同的错误类型返回不同的错误描述。在responseStatusError的情况下,我们可以通过使用参数status和message来生成具体的错误描述。

通过这种方式,我们可以从错误中提取参数,并将其包含在错误描述中,以便更好地理解错误的发生原因。

总结起来,通过错误协议和参数化的错误类型,我们可以在Swift中更好地处理和传递错误信息,并提供详细的错误描述来帮助我们理解错误的原因。

0
0 Comments

错误协议在Swift中的原因是为了提供本地化的错误描述。通过采用新的LocalizedError协议,可以为Swift定义的错误类型提供本地化的错误描述。为了实现这一点,可以将自定义的错误类型扩展为LocalizedError,并实现errorDescription属性来提供错误描述。对于更详细的错误信息,可以将错误转换为NSError,并在扩展中实现failureReason和recoverySuggestion属性来提供失败原因和恢复建议。此外,通过采用CustomNSError协议,错误还可以提供userInfo字典、domain和code等信息。将错误转换为NSError后,可以通过userInfo字典访问传递的信息。在实现LocalizedError时,需要注意将errorDescription声明为可选类型String?,而不是String,否则会导致默认实现("The operation couldn’t be completed")被提供。

0