iOS 转换为 BOOL

标签 ios objective-c casting

这两行代码是不同的还是相同的(编辑:它们做同样的事情,类型转换为 bool 值吗?):

BOOL isRegistered = (BOOL)[[NSUserDefaults standardUserDefaults] valueForKey:@"DEVICE_REGISTERED"];

BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Is Registered"] boolValue];

在 iOS8.1 中,第一个肯定是失败的。对 bool 的强制转换不起作用,强制转换总是返回 false。该值正在存储(对于第二个示例),如下所示:

[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%i", registerSuccess] 
                                          forKey:@"Is Registered"];

registerSuccess 是从网络服务 (JSON) 返回的值。

最佳答案

你将一个 NSString 对象转换为一个 bool,它永远不会做任何有用的事情。强制转换不会更改或转换某些内容,它只会使编译器静音。

假设 isRegistered 是一个 NSNumber 对象,因为它会从 JSON 响应中反序列化: 使用 NSNumber

[[NSUserDefaults standardUserDefaults] setObject:registerSuccess forKey:@"isRegistered"];

BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"isRegistered"] boolValue];

或者直接一个 bool 值

[[NSUserDefaults standardUserDefaults] setBool:[registerSuccess boolValue]forKey:@"isRegistered"];

BOOL isRegistered = [[NSUserDefaults standardUserDefaults] boolForKey:@"isRegistered];

关于iOS 转换为 BOOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28112772/

相关文章:

c# - 从通用抽象类派生类和转换错误?

android - 在 Google Drive API 中重复上传所需的 MIME 类型吗?

android - 如何减少 flutter 中的视频录制大小?

ios - 使用动画动态地将行添加到 TableView 的末尾

ios - 如何在 iPad 硬件(而不是模拟器)中测试 iPad 应用程序

c# - 为什么这个从 short 到 int 的转换会失败?

c++ - 当我们将 char 转换为大于 256 的数字时会发生什么?

ios - SVN 服务器不响应写请求

ios - 每次在嵌套条件 swift ios 中都会弹出 AlertController

ios - 多个持久存储协调器核心数据