无法使用 double 类型的左值初始化“id _NonNull”类型的参数
Posted
技术标签:
【中文标题】无法使用 double 类型的左值初始化“id _NonNull”类型的参数【英文标题】:Cannot initialize a parameter of type 'id _NonNull' with an lvalue of type double 【发布时间】:2017-10-23 07:46:00 【问题描述】:目标 C:
我有多个 double、long long、NSString 和 int 类型的变量,我想将它们放入一个数组中,以便在 CSV 文件中打印为单行
NSArray *ValArray = [NSArray arrayWithObjects: var1, var2, var3, var4, var5, nil];
这里 var1 是 double 类型,var2,var3 是 long long 类型。
这给了我一个语法错误,说“无法在 var1 处使用 double 类型的左值初始化 'id _NonNull' 类型的参数”
我是 Objective C 的新手,无法弄清楚我做错了什么。
【问题讨论】:
【参考方案1】:Objective-C 中NSArray
(和NSDictionary
)的内容必须是对象。所有标量类型 int
double
等都不是对象。
有一个简单的解决方案:
将所有标量类型包装在快捷方式NSNumber
初始化器@()
中
double var1 = 12.0;
NSString *var2 = @"Foo";
NSArray *valArray = [NSArray arrayWithObjects: @(var1), var2, nil];
或者更短
NSArray *valArray = @[@(var1), var2];
要从数组中取回 double
类型,您必须编写
double var3 = valArray[0].doubleValue;
旁注:变量名应该以小写字母开头。
【讨论】:
【参考方案2】:将 var1、var2、var3 转换为 NSNumber 即可解决。
【讨论】:
以上是关于无法使用 double 类型的左值初始化“id _NonNull”类型的参数的主要内容,如果未能解决你的问题,请参考以下文章
错误:无法使用“const char [34]”类型的左值初始化“const char”类型的返回对象
无法使用“const char [X]”类型的左值初始化“const signed char *”类型的成员子对象