我开始深入研究iOS开发,并且正在学习Objective C.我的背景是Java 我正在尝试创建一个简单的控制台游戏,并创建了以下常量:
#import <Foundation/Foundation.h>
static const NSString *ROCK = @"Rock";
static const NSString *PAPER = @"Paper";
static const NSString *SCISSORS = @"Scissors";
static const NSString *LIZZARD = @"Lizzard";
static const NSString *SPOCK = @"Spock";
static const NSArray *WEAPONS = @[SPOCK, ROCK, SCISSORS, LIZZARD, PAPER];
问题是我在最后一行收到错误:Initializer element is not a compile-time constant
。
我试图找出这意味着什么 - 我能找到的最接近的东西是弗雷德柯林斯的 this question ,他在那里指出“这是因为物体在[原文如此]工作运行。”我还不完全确定这是什么意思 - 这与Java有什么不同? (我绝对可以用Java做到这一点!)
无论如何,我需要一些初始化NSArray *WEAPONS
的方法,我无法在不添加其他文件的情况下为Fred Collin的问题找到答案。 (他正在使用一个类作为他的常量,因为我的程序很简单,可以包含在与main方法相同的文件中。)
答案 0 :(得分:1)
初始化数组的一种正确方法是:
static const NSString *ROCK = @"Rock";
static const NSString *PAPER = @"Paper";
static const NSString *SCISSORS = @"Scissors";
static const NSString *LIZZARD = @"Lizzard";
static const NSString *SPOCK = @"Spock";
static const NSArray *WEAPONS = nil;
+ (void)initialize {
WEAPONS = @[SPOCK, ROCK, SCISSORS, LIZZARD, PAPER];
}
initialize
类方法是一种特殊的类方法,只能在创建任何实例之前或调用任何方法(类或实例)之前调用一次。
答案 1 :(得分:0)
不允许使用NSArrays,必须在方法内部完成。
,不允许使用NSString以外的所有内容尝试类似
的内容static const NSString *ROCK = @"Rock";
static const NSString *PAPER = @"Paper";
static const NSString *SCISSORS = @"Scissors";
static const NSString *LIZZARD = @"Lizzard";
static const NSString *SPOCK = @"Spock";
static const NSArray *WEAPONS = nil;
- (void)init
{
WEAPONS = @[SPOCK, ROCK, SCISSORS, LIZZARD, PAPER];
}
答案 2 :(得分:-1)
正确的方法是在对象的init方法中执行,或
static const NSArray *WEAPONS = @[@"SPOCK", @"ROCK", @"SCISSORS", @"LIZZARD", @"PAPER"];
但我不推荐这个。