在Objective-C中创建整数数组的属性时遇到问题。我甚至不确定在Obj-C中是否可以做到这一点,所以我希望有人能帮助我找出如何正确地做到这一点,或者提供一个替代的解决方案。
myclass.h
@interface myClass : NSObject {
@private int doubleDigits[10];
}
@property int doubleDigits;
@end
myclass.m
@implementation myClass
@synthesize doubleDigits;
-(id) init {
self = [super init];
int doubleDigits[10] = {1,2,3,4,5,6,7,8,9,10};
return self;
}
@end
当我构建并运行时,我得到以下错误:
错误:属性'doubleDigits‘的类型与依瓦尔'doubleDigits'
的类型不匹配
发布于 2009-01-25 01:38:47
这应该是可行的:
@interface MyClass
{
int _doubleDigits[10];
}
@property(readonly) int *doubleDigits;
@end
@implementation MyClass
- (int *)doubleDigits
{
return _doubleDigits;
}
@end
发布于 2009-12-31 07:15:20
C数组不是属性支持的数据类型之一。请参阅Xcode文档中声明的属性页面中的“Objective-C编程语言”:
支持的类型
您可以为任何Objective-C类、核心基础数据类型或“普通旧数据”( POD )类型声明属性(请参阅C++语言注意:POD类型)。但是,有关使用核心基础类型的约束,请参阅“核心基础”。
POD不包含C数组。请参阅http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html
如果你需要一个数组,你应该使用NSArray或NSData。
在我看来,解决方法就像使用(void *)来绕过类型检查。您可以做到这一点,但它会使您的代码更难维护。
发布于 2012-10-13 03:10:04
正如lucius所说,不可能有C数组属性。使用NSArray
是可行的方法。数组只存储对象,所以您必须使用NSNumber
s来存储int。使用新的文字语法,初始化它是非常简单和直接的:
NSArray *doubleDigits = @[ @1, @2, @3, @4, @5, @6, @7, @8, @9, @10 ];
或者:
NSMutableArray *doubleDigits = [NSMutableArray array];
for (int n = 1; n <= 10; n++)
[doubleDigits addObject:@(n)];
有关更多信息,请访问:NSArray Class Reference、NSNumber Class Reference、Literal Syntax
https://stackoverflow.com/questions/476843
复制相似问题