我需要存储和传递几个配对对象:
1)NSString
文件名,例如“sprite.png”
2)BOOL
值是否应该为该精灵设置动画。
所以基本上,我有一堆精灵,每一个都是动画或不动画。
我认为我可以使用NSDictionary
存储所有内容,但我认为使用[NSNumber numberWithBool:YES]
作为键只允许您使用该值的单个条目。
什么样的结构最适合传递才能满足我的要求?
答案 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资源网站上有一个容器编程指南供开发人员使用,它或多或少地列出了哪个容器对什么有好处。