gpt4 book ai didi

objective-c - Objective C 集合中的 C 风格指针

转载 作者:行者123 更新时间:2023-11-30 19:22:08 25 4
gpt4 key购买 nike

我需要更改已放入 NSMutableArray 中的项目的值,而不真正知道它是什么变量。那可能吗?在 C 中,我相信这可以使用指针来完成

int i = 0;
int *j = &i;
*j = 5;
NSLog (@"'%d'",i); // Prints '5'

如何将其转换为 Objective C?因此,如果我将 2 个 NSString 放入 NSMutableArray 中:

NSString *text1 = @"Hello";
NSMutableString *text2 = @"World";
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:text1,text2,nil];

然后稍后

[arr objectAtIndex:1] = @"Everyone";
NSLog (@"'%@'",text2); // I want this to print 'Everyone'

我该怎么做?此语法给出错误 Expression is not assignable在最后一个代码块的第一行。

如果我稍微改变一下,使其看起来更像第一个代码块中的 C 代码:

NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:&text1,&text2,nil];

*[arr objectAtIndex:1] = @"Everyone"

我收到 ARC 错误 Implicit conversion of an indirect pointer to an Objective-C pointer to 'id' is disallowed with ARC在第一行和 Assigning to 'id' from incompatible type 'NSString *'在第二行。我尝试了一些其他的细微调整,但它们都抛出了一些错误。

显然我做得不对,但我已经没有主意了。

编辑:它认为我正在尝试创建一个新字符串并替换之前索引 1 处的字符串。这不是我想做的。我基本上是尝试使用数组来更改变量的值,而不必使用变量的名称(在我的实际项目中,当我需要更改它时,我不会知道它的名称是什么)。

最佳答案

您没有看到不同文本的原因是因为 Objective C 字符串是不可变的,并且您实际上已将一个新对象插入到数组中,如下所示:[arr objectAtIndex:1] = @"Everyone";

在您的示例中,您可以通过使用 NSMutableString、从数组中检索它并对其调用 setString 来实现您正在寻找的内容。

在一般情况下,如果您将一个对象插入到 NSArray 中,并且您正在修改该对象,则它将反射(reflect)在对该对象的所有其他引用中。

关于objective-c - Objective C 集合中的 C 风格指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146999/

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