如何创建已设置underlyingErrors属性的NSError对象?
创建带有指定underlyingErrors的NSError对象
注意:underlyingErrors 属性仅在 iOS 15.0+、macOS 12.0+、tvOS 15.0+、watchOS 8.0+ 及以上系统版本可用
Swift 实现
- 先构造需要的底层错误数组,再通过
NSError初始化方法,将数组存入userInfo的NSUnderlyingErrorsKey键中,即可自动映射到underlyingErrors属性:
// 构造多个底层错误实例 let error1 = NSError(domain: "com.example.test", code: 1, userInfo: [NSLocalizedDescriptionKey: "底层错误1"]) let error2 = NSError(domain: "com.example.test", code: 2, userInfo: [NSLocalizedDescriptionKey: "底层错误2"]) let underlyingErrors = [error1, error2] // 创建包含指定底层错误的主NSError let testError = NSError( domain: "com.example.main", code: 100, userInfo: [ NSLocalizedDescriptionKey: "主错误描述", NSUnderlyingErrorsKey: underlyingErrors ] ) // 验证属性 print(testError.underlyingErrors ?? []) // 输出构造的底层错误数组
Objective-C 实现
- 逻辑和Swift一致,通过
NSUnderlyingErrorsKey将底层错误数组传入userInfo:
// 构造底层错误 NSError *error1 = [NSError errorWithDomain:@"com.example.test" code:1 userInfo:@{NSLocalizedDescriptionKey: @"底层错误1"}]; NSError *error2 = [NSError errorWithDomain:@"com.example.test" code:2 userInfo:@{NSLocalizedDescriptionKey: @"底层错误2"}]; NSArray *underlyingErrors = @[error1, error2]; // 创建主错误 NSError *testError = [NSError errorWithDomain:@"com.example.main" code:100 userInfo:@{ NSLocalizedDescriptionKey: @"主错误描述", NSUnderlyingErrorsKey: underlyingErrors }]; // 验证属性 NSLog(@"%@", testError.underlyingErrors); // 输出底层错误数组
兼容低版本说明
如果需要兼容低于上述的系统版本,无法直接使用underlyingErrors属性,但可以通过userInfo[NSUnderlyingErrorsKey]直接获取底层错误数组,二者本质是同一数据的不同访问方式。
内容的提问来源于stack exchange,提问作者wristbands
相关产品推荐
相关产品推荐

