无法使用 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 *”类型的成员子对象

错误:无法使用“int [r][c]”类型的左值初始化“int *”类型的返回对象

函数类型的左值是不是是可修改的左值?

绑定 T&& 类型的左值表达式

错误:表达式必须是可修改的左值