Initializer元素不是编译时常量

时间:2014-06-13 14:59:57

标签: objective-c

使用objective-c编写程序。我收到错误(初始化元素不是编译时常量)并且我不确定我是否遵循它为什么会发生。我只想尝试初始化一个数组。我也使用xcode6。我的问题是:如何在Objective-c中正确地重写这个,以及在新的Swift中它会是什么样子?另外,为什么会出现错误 - 我不会在这个问题上遵循如何实现其他一些主题?

Name.h

#import <Foundation/Foundation.h>

@interface Name : NSObject
@property (nonatomic, retain) NSMutableArray *myArray;

@end

Name.m

#import "Name.h"

@implementation Name

NSMutableArray *myArray = [[NSMutableArray alloc] init]; //error shows up here - initializer element is not a compile-time constant

[myArray addObject:@"Object 1"];

[myArray addObject:@"Object 2"];

[myArray addObject:@"Object 3"];

@end

3 个答案:

答案 0 :(得分:5)

您应该只在方法

中初始化变量

尝试覆盖

 -(id) init
 {
  self = [super init];
  if(self)
  {
    myArray = [[NSMutableArray alloc] init];
  }
  return self;
 }

答案 1 :(得分:3)

错误

如错误所示,您只能在类的实现中初始化编译时常量

这将有效:

NSString* abcd = @"test";

因为@"test"是一个常量,并且在编译代码后永远不会改变。

[[NSMutableArray alloc] init]不是常数,这就是您收到错误的原因。您必须实现init方法来初始化数组。

<强>夫特

对于你问题的迅速部分:

您仍然可以在swift中使用NSArray或使用swift Array类型。 您可以查看Working with Cocoa Data Types DocumentationApple collections types Swift Documentation

如果您仍想在swift中使用NSArray:

var array:NSMutableArray = NSMutableArray()
array.addObject("test1")
array.addObject("test2")
// or
array:NSMutableArray = ["test1", "test2"]

或者如果你想使用swift数组:

var array:String[] = ["test1", "test2"]
// or
var array:String[] = String[]()
array.append("test1")
array.append("test2")

答案 2 :(得分:1)

尝试编辑您&#34;构建设置&#34; - &gt;&#34;编译源代码&#34; to&#34; Objective-C ++&#34;,也许可以解决你的问题。