用于传递值对的数据结构?

时间:2013-02-04 19:51:13

标签: objective-c cocoa-touch data-structures

我需要存储和传递几个配对对象:

1)NSString文件名,例如“sprite.png”

2)BOOL值是否应该为该精灵设置动画。

所以基本上,我有一堆精灵,每一个都是动画或不动画。

我认为我可以使用NSDictionary存储所有内容,但我认为使用[NSNumber numberWithBool:YES]作为键只允许您使用该值的单个条目。

什么样的结构最适合传递才能满足我的要求?

4 个答案:

答案 0 :(得分:4)

由于Objective-C是C的严格超集,因此您可以使用C struct。例如:

struct sSpriteDef
{
  BOOL isAnimated;
  NSString *name;
};

typedef struct sSpriteDef SpriteDef;

答案 1 :(得分:4)

上课:

@interface SpriteTuple : NSObject 

 @property (assign) BOOL shouldAnimate;
 @property (copy) NSString *filename; 

@end

@implementation

 @synthesize shouldAnimate, filename;

@end

你已经完成了。个别哈希值得更有活力但不那么惯用的方式:

static NSString *image = @"ImageFileKey";
static NSString *shouldAnimate = @"ShouldAnimateKey";

@{ image: @"path/to/image.png";       shouldAnimate: @(YES) };
@{ image: @"path/to/secondimage.png"; shouldAnimate: @(NO) };
// ...

这是来自Python或Ruby的人可能会这样做...

答案 2 :(得分:0)

如果我理解正确,你需要的是一种表示元组的方法,你可以用它来关联一组相关的值,并作为参数传递给方法,设置为对象的属性等。我有在我自己的发展中无数次遇到这个问题。在早期,我会使用NSArray。所以在你的情况下,我会说:

NSArray *spriteTuple = [NSArray arrayWithObjects:someSpriteImageName,someBoolNSNumber,nil];

并解压缩为:

NSString *name = [spriteTuple objectAtIndex:0];
BOOL animated = [[spriteTuple objectAtIndex:1] boolValue];

但是,随着时间的推移,随着时间的推移,元素的数量会随着项目的发展而增加,因此从一对开始将成为三元组,四元组,...上面的代码将变得非常容易重新排序错误。

iLuvCapra在我输入时提供的答案就是我现在总是在做的事情。只需创建一个从NSObject派生的新类,并使参数成为其属性。清洁和可扩展。

答案 3 :(得分:0)

我认为你所说的是:我有一个精灵,一个键@“spriteName”映射到一个值[NSNumber numberWithBool]。

你打算用这个容器做什么?喜欢:     它会持有大量数字还是很小?(如果它的数量小于10,则数组,哈希,树,w.e可以说是无关紧要的短期)     大量或未知然后重要的是你将用它做什么?             - 添加和删除很多“NSSet”            通过可比较的密钥“NSDictionary”,可以看到很多个人的东西             - 通过整个列表很多“NSArray”            等....

等...这些是您在选择容器之前需要提出的问题。 Apples资源网站上有一个容器编程指南供开发人员使用,它或多或少地列出了哪个容器对什么有好处。