gpt4 book ai didi

objective-c - 将 NSNumber 对象分配给 NSString 对象不会导致任何错误或警告

转载 作者:行者123 更新时间:2023-11-28 18:43:48 24 4
gpt4 key购买 nike

我已将 NSNumber 对象放入 NSDictionary 对象中,然后将其弹出并将其分配给声明为 NSString 实例的变量。

NSString *test;
NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:1000] forKey:@"key"];

test = [dict valueForKey:@"key"];
NSLog(@"%@, type of %@", test, NSStringFromClass([test class]));

return 0;

运行上面的代码后,我发现声明为 (NSString *) 的测试类型是 __NSCFNumber。为什么会发生,为什么编译器没有给出警告或错误?我是否必须使用 NSString 构造函数(例如 NSStringWithFormat...)才能将测试保持为 NSString 的实例?

最佳答案

这没有失败或警告您的原因是因为 valueForKey: 返回类型为 id 的对象,您可以将其分配给任何 Objective-C 类型。你需要知道你从你的收藏中得到什么类型的值(value)才能安全地使用它们。在这种情况下,您知道它包含一个 NSNumber,因此您应该期待一个 NSNumber,如果您需要一个字符串,则需要进行适当的转换。

NSNumber *test = [dict valueForKey:@"key"];
NSLog(@"%@, type of %@", test, NSStringFromClass([test class]));

//If you need a string
NSString *testStr = [test stringValue];

关于objective-c - 将 NSNumber 对象分配给 NSString 对象不会导致任何错误或警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com