Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在NSUserDefaults上调用setObject(uu0;:forKey:)时,Bool是否会桥接到NSNumber?_Swift_Nsuserdefaults - Fatal编程技术网

Swift 在NSUserDefaults上调用setObject(uu0;:forKey:)时,Bool是否会桥接到NSNumber?

Swift 在NSUserDefaults上调用setObject(uu0;:forKey:)时,Bool是否会桥接到NSNumber?,swift,nsuserdefaults,Swift,Nsuserdefaults,在课堂参考中,我发现以下句子: func setObject_uuvalue:AnyObject?,forKey defaultName:String value参数只能是属性列表对象:NSData、NSString、NSNumber、NSDate、NSArray或NSDictionary。对于NSArray和NSDictionary对象,其内容必须是属性列表对象 如果我在Swift中使用布尔值调用该方法,它会被桥接到NSNumber吗?我必须打电话给setBool吗?那么Int、Float和D

在课堂参考中,我发现以下句子:

func setObject_uuvalue:AnyObject?,forKey defaultName:String

value参数只能是属性列表对象:NSData、NSString、NSNumber、NSDate、NSArray或NSDictionary。对于NSArray和NSDictionary对象,其内容必须是属性列表对象

如果我在Swift中使用布尔值调用该方法,它会被桥接到NSNumber吗?我必须打电话给setBool吗?那么Int、Float和Double呢


PS:我在我的项目中尝试过。当我叫objectForKey为!布尔,它有时会崩溃,有时不会。我不确定发生了什么,所以我问了这个问题。

如果要存储BOOL,必须调用setBool,因为setObject将对象作为参数


BOOL、Int、Float等是非对象的基本类型。

Swift BOOL桥接到Objective-C NSNumber。如果你不想依赖隐式施法,你也不应该,因为它会在Swift 3中消失,你可以通过说myBool为NSNumber来自己施法。但我向您保证,在您的代码中,它是隐式强制转换的

反过来说,NSNumber连接到Swift Bool,但它必须以某种方式被明确地丢弃。如果你说是!布尔,你在要求崩溃-你在要求崩溃,只要你说是所以,如果你不想撞车,就别这么说。还有很多其他的安全施法方法,包括粗野


但是,崩溃与调用setObject:forKey:的方式无关。这与你说的“作为”有关!反过来说,在那个时候,要么没有这样的键,要么键的值不是一个包裹布尔的NSNumber。实际上,您没有显示全部代码,也没有显示任何代码,因此对此没有任何建设性的意见。

您是否尝试过查看会发生什么?这应该是问a会发生什么之前的第一步。。。问题。@BryanOakley事实上我已经试过了。当我称objectForKey为!布尔,它有时会崩溃,但有时不会。我不确定发生了什么,所以我问了这个问题。请编辑您的问题以包含这些信息。不过,我认为它随机崩溃是一个很好的理由,请注意文档中的建议。@yzyzsun现在已经回答了您的问题BoolWorkey/IntegerWorkey的好处是它返回一个非可选的false/0(无值)。我认为在Swift中,它们不能再简单地称为主要类型了。我们可以看到Bool、Int、Float等实际上是结构,有时它们可以隐式转换为相应的Cocoa类型。所以我想知道它们是否在这里连接到NSNumber。但你是对的,但我不认为他们是桥,或者如果是车,这就是为什么你有随机碰撞。我一开始没有提到碰撞,只是因为我不确定其他地方是否有任何错误。您的保证使我有理由亲自检查整个代码。非常感谢。