将 Null 值和一个变量传递给 NSMutableArray/NSArray。为什么输出会有差异?
Passing Null Values and a variable in to NSMutableArray/NSArray. Why is there a difference in output?
我的问题是如何将 Null 值传递给 NSMutableArray/NSArray。
但是通过搜索 google 并浏览不同的站点,我认为我已经达到了我的目的。但是,在尝试的过程中,我又产生了新的疑问。
看下面的代码来理解我的问题
我正在声明一个可变数组并最初用一些对象对其进行初始化,而且我在声明本身时将一个空值传递给它。
现在当我 运行 下面这段代码时
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",@"last", nil];
[ar addObject:[NSNull null]];
NSLog(@"%@",mar);
o/p 是:
(
first,
last,
"<null>"
)
但我真正的疑问是当我如下初始化 NSMutableArray 时
NSString *str;
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil];
[ar addObject:[NSNull null]];
NSLog(@"%@",mar);
o/p 是:
(
first,
"<null>"
)
数组中的第 2 个元素是 "null",我知道因为我传递了一个变量而没有给它赋值。它正在打印空值。但是为什么没有打印剩余的元素。
据我所知,数组在初始化时只要克服nil就会停止添加元素。但是在这里,在这种情况下。 o/p 显示第二个元素也为空。(但不是零。)
那为什么剩下的元素没有打印出来
更新问题
NSString* str;
NSLog(@"%@",str);
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil];
NSLog(@"%@",mar);
上面代码的o/p是
(null) // for str an uninitialised NSString variable.
(
first // first element in the array
)
如果 str 中存在的值为 (null),为什么数组遇到 nil 并停止向数组添加元素并打印它们。
现在,有人回答这个问题吗?
initWithObjects
使用 nil
作为最后一项的标记。如果将 nil
(单元化的 str
变量)作为 4 项中的第 2 项传递给它,实际上只会添加第一个。
[[NSMutableArray alloc]initWithObjects:@"first",str ?: [NSNull null],@"last", nil];
将通过将 nil
替换为 [NSNull null]
来解决您的问题。
另见 NSArray creation with variable argument lists
在 objective-C 中,当遍历数组时,如果遇到 nil/null 则它被视为数组的结尾。
这就是它不打印剩余值的原因。
如果你想在 nil/null/Nil 之间有明显的区别,那么检查 Difference between nil, NIL and, null in Objective-C
我的问题是如何将 Null 值传递给 NSMutableArray/NSArray。
但是通过搜索 google 并浏览不同的站点,我认为我已经达到了我的目的。但是,在尝试的过程中,我又产生了新的疑问。
看下面的代码来理解我的问题
我正在声明一个可变数组并最初用一些对象对其进行初始化,而且我在声明本身时将一个空值传递给它。
现在当我 运行 下面这段代码时
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",@"last", nil];
[ar addObject:[NSNull null]];
NSLog(@"%@",mar);
o/p 是:
(
first,
last,
"<null>"
)
但我真正的疑问是当我如下初始化 NSMutableArray 时
NSString *str;
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil];
[ar addObject:[NSNull null]];
NSLog(@"%@",mar);
o/p 是:
(
first,
"<null>"
)
数组中的第 2 个元素是 "null",我知道因为我传递了一个变量而没有给它赋值。它正在打印空值。但是为什么没有打印剩余的元素。
据我所知,数组在初始化时只要克服nil就会停止添加元素。但是在这里,在这种情况下。 o/p 显示第二个元素也为空。(但不是零。)
那为什么剩下的元素没有打印出来
更新问题
NSString* str;
NSLog(@"%@",str);
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil];
NSLog(@"%@",mar);
上面代码的o/p是
(null) // for str an uninitialised NSString variable.
(
first // first element in the array
)
如果 str 中存在的值为 (null),为什么数组遇到 nil 并停止向数组添加元素并打印它们。
现在,有人回答这个问题吗?
initWithObjects
使用 nil
作为最后一项的标记。如果将 nil
(单元化的 str
变量)作为 4 项中的第 2 项传递给它,实际上只会添加第一个。
[[NSMutableArray alloc]initWithObjects:@"first",str ?: [NSNull null],@"last", nil];
将通过将 nil
替换为 [NSNull null]
来解决您的问题。
另见 NSArray creation with variable argument lists
在 objective-C 中,当遍历数组时,如果遇到 nil/null 则它被视为数组的结尾。
这就是它不打印剩余值的原因。
如果你想在 nil/null/Nil 之间有明显的区别,那么检查 Difference between nil, NIL and, null in Objective-C