uir*_*han 8 objective-c nserror ios
很抱歉提出这个问题.我知道在java中我们正在为自定义异常扩展Exception类.但我没有在目标c中看到任何情况.
所以我的问题,扩展NSError和引入自定义错误是一个好习惯吗?如果是这样,我们应该扩展NSError类.我也检查过这方面的文档.但我看不到NSError的覆盖注释.
Rob*_*ier 15
虽然我同意你不应该继承子类NSError,但是在它上面添加类别非常有用,而且我会定期这样做.例如,假设您的系统经常发布来自某个JSON块的错误.我发现创建一个类别非常方便:
@interface NSError (MyErrors)
// Construct an NSError from data in JSON.
// Include full JSON response in the userInfo
+ (NSError *)myErrorWithJSON:(JSON *)json;
// Parse the text out of the user info
- (NSString *)myErrorMessage;
// The full JSON error block as a string
- (NSString *)myErrorJSON;
// BOOLs can be helpful sometimes, or you could return an enum for use in a switch.
- (BOOL)myIsNetworkError;
- (BOOL)myIsAuthError;
@end
Run Code Online (Sandbox Code Playgroud)
我经常编写小帮助程序来构造NSError更简单,按照我想要的方式构造userinfo,并将pull数据从userinfo中取回,而不需要调用者知道其内部表示.我发现这是一种非常好的数据隐藏形式,并鼓励使用更具描述性的消息.
同样,即使对于较小的项目,我也经常创建一个+myErrorWithCode:localizedDescription:类别方法.我知道我的域名,所以我通常不需要通过它,这使得NSLocalizedDescription在用户信息中设置密钥变得更加容易.同样,这通过使它们更容易创建来鼓励更好的错误,并且更容易更改错误处理的实现细节.
我从来没有见过它,因为NSError它已经非常多才多艺.它允许通过设置domain和code属性来定义错误类型,并允许在userInfo字典中附加任意附加信息.
所以,不,这不是好习惯.
在文档中写道,可以继承子类:
应用程序可以选择创建NSError的子类,例如,通过覆盖localizedDescription来提供更好的本地化错误字符串。
就我而言,我正在使用OSStatus,它是Int32。NSError构造函数仅支持Int。因此,我需要对其进行子类化以支持OSSStatus。
| 归档时间: |
|
| 查看次数: |
3642 次 |
| 最近记录: |