将NSNumber的NSArray转换为NSStrings数组的更好方法

asl*_*nci 10 cocoa objective-c nsarray

我有一个NSArrayNSNumbers,我想这个转换成NSArrayNSStrings,通过获取stringValue每个NSNumber第一阵列英寸

我想到的方法是迭代第一个中的每个值,获取其字符串值并将其添加到另一个数组中.但是应该有一个更优雅的解决方案.你知道吗?

Jos*_*ell 32

NSArray实现Key-Value Coding方法valueForKey:,使其返回一个新数组.新数组包含向原始数组中的每个对象询问指定值的结果.在这种情况下,NSNumber有它stringValue,所以你要做的就是:

NSArray * b = [a valueForKey:@"stringValue"];
Run Code Online (Sandbox Code Playgroud)

但是,简单的旧快速枚举(或enumerateObjectsUsingBlock:)并不是一个可怕的解决方案.最有可能NSArray的实现在内部valueForKey:使用for循环,任何稍后阅读它的人都会很容易理解.

  • 不是滥用 - 相当惯用的IMO.stringValue是NSNumber类的有效属性,NSArray的valueForKey:有意设计为允许以这种方式转换数组.这正是我写它的方式,无论价值多少. (4认同)
  • @morningstar:键值编码早于声明的属性多年.没有文件要求,甚至没有暗示该值应该是声明的属性.您提出的替代情况确实是对KVC的滥用,但那是因为它违反了属性的语义.你可以用声明的属性做同样的事情. (3认同)