我有一个ObjC对象定义如下
@interface Fruit : NSObject
{
int fruitsinbranch[4];
}
@property (readonly) int fruitsinbranch[4];
@end
然后在实现中我有通常的
@synthesize fruitsinbranch[4];
它不起作用。这样做的正确方法是什么?
(不,我不是要求其他方法来做事,比如NSArray等......我想要回答我提出的问题。)
更新:我的解决方案很蹩脚,但它确实有效。我创建了方法
-(int) fruitsinbranch:(int) i
这给了一个足够接近我想要的解决方案。
答案 0 :(得分:2)
为C数组指定一个setter是没有意义的 - 在C中甚至没有“设置数组”这样的概念。你可以初始化数组,你可以访问它的元素,但你不能设置数组本身。
对于getter,我想不出无法工作的任何原因,但运行时只是不支持C数组作为属性。它只是没有内置 - 可能是因为数组不像C中的其他类型那样真正起作用,例如前面提到的事实,即没有设置它们。
您可以获得的最接近的是在初始化程序中指定malloc的只读int*
属性。
答案 1 :(得分:2)
你最接近的是使用int*
属性而不是合成getter:
@interface Fruit : NSObject {
int fruitsinbranch[4];
}
@property (readonly) int* fruitsinbranch;
- (int *)fruitsinbranch { return fruitsinbranch; }
答案 2 :(得分:0)
不幸的是,Objective-C不支持具有C数组值的属性。
答案 3 :(得分:0)
指定readonly
,然后要求它合成一个setter和getter(特别是setter)没有意义,尽管它应该有效。根据这个objective c property document,当你在readonly对象上明确设置一个setter时,你至少会得到一个编译器警告。
也许您可以尝试使用setter=
和getter=
明确设置它们?我知道这会违反您的原始问题,但如果您的问题出在其他地方,则可能会引发错误。