使用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
答案 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 Documentation或Apple 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)