2014-06-13 71 views
3

使用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 
+2

请问一个问题。另外,如果你想把它翻译成swift,请继续尝试。如果您遇到问题,请在此提出具体问题。 –

+1

这是对您对已删除问题的评论的回复:http://stackoverflow.com/q/24252665/365496。是的,'uniform_real_distribution'结合'mt19937'引擎应该是相当统一的。还要注意,当使用''库时,你不需要使用'srand()'来播种。初始化引擎('mt19937')就足够了。 – bames53

+0

[编译器错误:“初始化程序元素不是编译时常量”](http:// stackoverflow。com/questions/6143107/compiler-error-initializer-element-is-not-a-compile-time-constant) –

回答

5

你应该初始化里面只有一个方法

尝试覆盖

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

我在哪里添加addObject方法? – user3681670

+0

NSMutableArray * myArray = @ [@“Object 1”,@“Object 2”,@“Object 3”]; –

+0

这是否在init方法之后执行? – user3681670

3

错误变量

由于错误说,你只能初始化编译时间常数在类的实现

这将工作:

NSString* abcd = @"test"; 

因为@"test"是一个常数,编译后不会改变的代码。

[[NSMutableArray alloc] init]不是一个常数,这就是为什么你得到一个错误。你将不得不实施一个init方法来初始化你的数组。

斯威夫特

对于你的问题的迅速一部分:

您仍然可以使用的NSArray在SWIFT或使用快捷数组类型。 您可以查看Working with Cocoa Data Types DocumentationApple collections types Swift Documentation

如果您仍然希望在迅速使用的NSArray:

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

或者,如果你想使用快捷阵列:

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

非常有帮助......它如何知道数组不是常量,并且在编译时间后会改变?在最初的代码中,我只是使用字符串? – user3681670

+1

alloc和init是NSMutableArray类的方法。在执行代码期间,编译器无法知道这些方法在调用它们之前会返回什么。编译器无法知道编译时返回的方法。 – olicarbo

1

尝试编辑你“大厦设置“ - >”将源代码编译为“改为”Objective-C++“,也许可以解决你的问题。

+0

适合我!谢谢 – vidalbenjoe

相关问题