最近在做程序中需要在Objective-C类中声明一个C语言方式的一维数组:
@interface CArrayTest : NSObject
{
@private
BOOL testArray[4];
}
@end
声明属性如果是
@property(nonatomic,assign)BOOL testArray[4];
会提示错误:Property can not have array or function type BOLL[4]
=======================================================================
正确做法:不声明property属性,也就是不用系统的set个get方法,自己手动添加set和get方法
#import <Foundation/Foundation.h>
@interface CArrayTest : NSObject
{
@private
BOOL testArray[4];
}
- (void)setTestArray:(BOOL*)aTestArray;
- (BOOL *)testArray;
@end
在CArrayTest.m中的实现
#import "CArrayTest.h"
@implementation CArrayTest
- (void)setTestArray:(BOOL*)aTestArray
{
if(aTestArray != NULL)
{
for(int i = 0; i < 4; ++i)
{
testArray[i] = aTestArray[i];
}
}
}
- (BOOL *)testArray
{
return testArray;
}
@end
测试代码:
//测试代码
CArrayTest *test = [[CArrayTest alloc]init];
BOOL tmp[4] = {YES,NO,YES,YES};
test.testArray = tmp; //或者是 [test setTestArray:tmp];
//输出
for(int i = 0; i < 4; ++i)
{
if(YES == test.testArray[i]) //或者是 [test testArray][i];
NSLog(@"YES ");
else
NSLog(@"NO ");
}
值得注意的是:
Objective-C中返回类型不能是C语言的数组,当然C语言中数组名其实就是一个对应类型指针,指向数组的首地址,
所以我们是用的BOOL类型的数组,但在set和get方法中的参数和返回值都必须是BOOL*(指针,指向数组的首地址)