【问题标题】:Trouble Reassigning NSArray values in objective C在目标 C 中重新分配 NSArray 值的问题
【发布时间】:2015-05-26 19:32:56
【问题描述】:

我在使用 Objective-c 中的基本 for 循环时遇到问题。我对这种语言有点陌生,但我正在努力实现以下目标:

for(int i=0; i<[yVals count]; i++)
{
    yVals[i] = exp(yVals[i]);
}

其中 yVals 是 NSArray 中的双精度数组。 但是,我在 xCode 中收到此错误:“将 'id' 传递给参数类型 'double'”。

我该如何解决这个问题?我是不是把事情过于简单化了?

【问题讨论】:

  • 除了@rmaddy的正确答案,你应该使用快速枚举而不是for循环。
  • @AminNegm-Awad 需要一个索引来完成分配。如果您使用快速枚举,则需要添加额外的代码来跟踪索引。
  • @rmaddy 由于索引从 0 到 N-1,一个新的空数组和 -addObject 就可以完成这项工作。

标签: ios objective-c xcode for-loop nsarray


【解决方案1】:

您需要对原始类型进行装箱/拆箱。您的代码需要类似于:

for(int i=0; i<[yVals count]; i++)
{
    yVals[i] = @(exp([yVals[i] doubleValue]));
}

我假设 yValsNSMutableArrayNSNumber 对象。

请注意需要在号码上拨打doubleValue,以便您可以拨打exp()。然后@( ) 语法将结果重新装箱到NSNumber 对象中,以便您可以将其放回数组中。

【讨论】:

  • 谢谢!如果 yVals 不是可变数组,我将如何更改此值?有可能吗?
  • 什么是yVals?如果它是NSArray,那么它是不可变的,您可以运行您的代码。您需要先制作数组的可变副本。
  • 是的,它是一个 NSArray。如果我想制作一个可变副本,我该怎么做?
  • 如果您要定期更改数组,只需将其声明为NSMutableArray 而不是NSArray(和alloc/initNSMutableArray)。否则,您可以在NSArray 上调用mutableCopy 并将其分配给NSMutableArray。如果您需要更多帮助,请使用有关如何声明和初始化 yVals 的详细信息更新您的问题。这样可以更轻松地指出您需要进行哪些更改。
猜你喜欢
  • 2013-02-17
  • 2011-10-24
  • 2011-11-07
  • 2015-02-23
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多