【问题标题】:create constant 2d array in objective-c [duplicate]在objective-c中创建常量二维数组[重复]
【发布时间】:2014-08-06 04:16:14
【问题描述】:

有谁知道我如何在 iOS/Ojective-c 中创建一个常量二维数组?在java中它会是

public static final String MY_2D_ARRAY = {{"dog","cat","sheep"},{"bread","end","van"}};

以下内容不适合我

extern NSString * const MY_2D_ARRAY[][]; //etc

【问题讨论】:

  • @p4sh4 如果它是重复的,你介意在这里写下答案吗?您提供的链接不涉及二维数组。
  • 你可以在下面看到我的答案。如果您不能将一维数组创建为常量,那么您显然无法创建二维数组。另一个问题的一些答案描述了如何尝试使用 C 数组来完成。

标签: ios objective-c multidimensional-array nsstring constants


【解决方案1】:

在 Objective-C 中创建数组需要使用NSArray(Immutable)。或者NSMutableArray(mutable)

NSArray *arr = @[@[@"a", @"b"], @[@"c", @"d"]];

【讨论】:

  • @{} 不适用于数组。这是字典。
  • 我应该在代码中的什么位置放置那一行?因为 Xcode 给出了错误:Initializer element is not a compile-time constant
  • @learner 放在实施部分。
  • 是的。我就是这么做的。
【解决方案2】:

方法如下

NSArray *arr = @[
                 @[@"dog", @"cat", @"sheep"], 
                 @[@"bread", @"end", @"van"],
                  ...
                ];

【讨论】:

  • 我应该在代码中的什么位置放置那一行?因为 Xcode 给出了错误:Initializer element is not a compile-time constant
  • 它需要进入一个在你的应用程序启动时运行的函数,你不能将它定义为一个 const/extern 因为当使用@[] 符号时,它实际上不是一个常量,它是写[NSArray arrayWithObjects:x,y,z,nil];的简写
【解决方案3】:

你不能创建一个常量 NSArray,因为作为任何 Objective-C 对象(除了 NSString),它是在运行时创建的,你不能使用表达式来初始化它。您应该考虑使用其他方法,也许使用单例。

【讨论】:

    【解决方案4】:

    由于在 ios 中您无法创建如图所示的常量数组,但您可以将其用作备用

    //  constants.h
    
    + (NSArray*) MY_2D_ARRAY;
    
    //  constants.m
    
    + (NSArray*) MY_2D_ARRAY{ 
    
        static NSArray* arr = nil;
    
        if (arr == nil) {
            arr = @[@"a",@"b"]];
        }
        return arr;
    }
    
    // you can Use it where you required 
    
    [constants MY_2D_ARRAY];
    

    如果这对您有帮助,那么您可以接受它作为解决方案。

    【讨论】:

    • 您需要使用 dispatch_once 使其成为线程安全的
    • 为什么这个答案被否决了?如果有人有更好的建议,请写下他们的答案,这样有助于我们理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多