Ash*_*ark 44
如果你想使用NSArray,你需要装箱你的结构.您可以使用NSValue类对它们进行编码.
像这样编码:
struct foo {
int bar;
};
struct foo foobar;
foobar.bar = 3;
NSValue *boxedFoobar = [NSValue valueWithBytes:&foobar objCType:@encode(struct foo)];
Run Code Online (Sandbox Code Playgroud)
然后把它拿回来:
struct foo newFoobar;
if (strcmp([boxedFoobar objCType], @encode(struct foo)) == 0)
[boxedFoobar getValue:&newFoobar];
Run Code Online (Sandbox Code Playgroud)
Geo*_*lly 20
或者动态分配:
struct foo {
int bar;
};
int main (int argc, const char * argv[]) {
struct foo *foobar = malloc(sizeof(struct foo) * 3);
foobar[0].bar = 7; // or foobar->bar = 7;
free(foobar);
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*ano 11
如果你对普通的旧C数组没问题:
struct foo{
int bar;
};
int main (int argc, const char * argv[]) {
struct foo foobar[3];
foobar[0].bar = 7;
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个NSArray,你需要一个包装器对象.大多数原语使用NSNumber,但这可能不适用于您的结构.包装器写起来并不是很难,尽管这样会破坏使用结构的目的!
编辑:这是我没有做过但只是想到的事情.如果你考虑一下,NSDictionary基本上是一个对象的结构.您的键可以是NSStrings的结构组件的名称,您的值可以是适用的Cocoa包装器中包含的相应数据类型.然后把这些词典放在NSArray中.
我想要的是,你有很多选择.如果我是你,我会做一些实验,看看什么效果最好.