0

我是这种语言的新手(Objective-C)。我的目的是创建一个带有随机句子的 iOS 应用。一切都完成了,现在我只是用下面的代码随机化单词..

-(IBAction)randText:(id)sender {

    int text;
    text = rand()% 6;

    switch (text) {
        case 0:
            textLabel.text = @"Ett";
            break;
        case 1:
            textLabel.text = @"Två";
            break;

等等...

但是,我想知道我是否可以像在一个单独的文件中创建一个库并将其包含/导入到“switch”中,而不是制作数百个每个带有较长句子的“case”。

希望你明白我的意思。

提前致谢!

4

3 回答 3

1

您应该将单词放入一个数组中并使用 arc4random_uniform 在数组中选择一个索引。您不需要任何 switch 语句。

于 2013-02-11T05:05:06.580 回答
1

您可以创建一个包含字符串数组的属性列表文件。例如,创建一个名为 的 plist 文件words.plist,然后使用 Xcode 内置的 plist,编辑器将根对象设置为数组,并将行添加到数组中。您可以使用以下方式加载它:

NSURL *plistURL = [[NSBundle mainBundle] URLForResource:@"words" withExtension:@"plist"];
NSArray *words = [NSArray arrayWithContentsOfURL:plistURL];

// pick a random word:
NSString *randomWord = [words objectAtIndex:arc4random_uniform(words.count)];

这有以下好处:

  1. plist 文件是可本地化的,因此可以将其翻译成多种语言,而无需修改加载 plist 的代码。

  2. 尝试将数据和代码分开是个好主意。

  3. 单词列表可以从您想要的任何 URL 加载,包括从 Web 服务器加载。

举个例子:

MyAppDelegate.h

@interface MyAppDelegate : NSObject <UIApplicationDelegate>
@property NSArray *words;
// ... and your other properties as well
@end

MyAppDelegate.m

@implementation MyAppDelegate

- (void) applicationDidFinishLaunching:(UIApplication *) app
{
    NSURL *plistURL = [[NSBundle mainBundle] URLForResource:@"words" withExtension:@"plist"];
    self.words = [NSArray arrayWithContentsOfURL:plistURL];
}

- (NSString *) pickRandomWord
{
    return [self.words objectAtIndex:arc4random_uniform(self.words.count)];
}

- (NSString *) makeRandomSentence
{
    NSMutableString *result = [NSMutableString string];
    for (NSUInteger i = 0; i < 10; i++)
        [result appendFormat:@"%@ ", [self pickRandomWord]];
    return result;
}

@end
于 2013-02-11T05:13:44.710 回答
0

您可以将所有字符串放在 NSArray 中,然后使用

arrayWithStrings[arc4random_uniform(arrayWithStrings.count)];

如果您将所有字符串都保存在 JSON 或 plist 文件中,则可以通过NSJSONSerialization[NSArray arrayWithContentsOfURL:]

于 2013-02-11T05:06:14.570 回答