【问题标题】:Best way to declare an array of NSInteger in objective-c [duplicate]在objective-c中声明一个NSInteger数组的最佳方法[重复]
【发布时间】:2014-02-09 07:41:10
【问题描述】:

我想在头文件中声明一个 NSInterger 数组,最好的方法是什么? 我尝试了这段代码,但它导致了错误

@interface test:NSObject
{
}
@property(nonatomic,readwrite)NSInteger f[4]={1,2,3,4}; // Error!!!
@end

【问题讨论】:

  • 您没有在标头中初始化属性,而是在实现文件中,特别是在init方法中进行

标签: ios objective-c


【解决方案1】:

你不能这样做;而是在对象的 init 方法中初始化数组并提供自定义 setter/getter:

标题:

@interface test:NSObject
{
    NSInteger _f[4];
}
@property(nonatomic,readwrite) NSInteger *f;
@end

实施:

@implementation test

- (id)init {
    self = [super init];
    if (self) {
        _f[0] = 1;
        _f[1] = 2;
        _f[2] = 3;
        _f[3] = 4;
    }
    return self;
}

- (NSInteger *)f {
    return _f;
}

- (void)setF:(NSInteger *)f {
    for (NSUInteger i = 0; i < 4; i++)
        _f[i] = f[i];
}

@end

【讨论】:

    【解决方案2】:

    您确定要一个 NSInteger 数组吗? NSIntegers 是原始类型;它们不是对象。对于大多数用例,Objective-C 中的通常约定是存储 NSNumber 对象的 NSArray。文字数字可以通过在其前面加上 @ 符号来转换为 NSNumber。

    在您的标题中:

    @property(nonatomic, strong) NSArray *myArray;
    

    在您的 init 方法或类似方法中:

    self.myArray = @[ @1, @2, @3, @4 ];
    

    【讨论】:

    • 以及如何以这种方式获取值?
    • 要检索值,您可以像访问普通 C 数组一样访问元素:NSNumber *number = self.myArray[0];。请注意,如果您想要返回原始的 NSInteger 值(而不是 NSNumber 对象),您需要在号码上调用 integerValue[number integerValue];
    【解决方案3】:

    int 数组[100]; 将其创建为全局变量。

    在你的 .m 文件中添加它,

    @interface MyClass ()
    
    @end
    
    @implementation MyClass{
    }
    int a[] ={1,2,34};
    

    -(void)init{,.....

    试试 NSLog(@"%d",a[1]),它会完美打印出来。

    【讨论】:

    • 但是我想把一些值直接放到数组中? int array[100]={1,2,3,4} 也会导致错误?
    • int 数组[]={1,2,3,4}。先生,这边走。
    • 对不起,我在 Objective-c 中的问题!
    • 你可以在objective C中编写c和c++代码。更新了答案,试一试。
    • +1 用于老式解决方案。我自己也经常用。
    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多