【问题标题】:Find NSString in const NSString *const[]在 const NSString *const[] 中查找 NSString
【发布时间】:2015-07-16 09:45:15
【问题描述】:

我有一个 constants.h 文件并声明:

extern NSString * check_array_editable[];

在我设置的 constants.m 中:

NSString * check_array_editable[] = { @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"9", @"11", @"14" , @"17", @"18", @"21" };

所以不必调用初始化程序,如果我使用 NSArray 而不是集合,我必须做什么。

现在我导入 constants.h 并可以访问 check_array_editable[]。 但是我将如何获得特定项目的长度和索引,例如 NSArray 的使用:

 BOOL isTheObjectThere = [check_array_editable containsObject: @"my string"];
 NSUInteger indexOfTheObject = [check_array_editable indexOfObject: @"my string"];

---编辑 我最终决定使用 NSArray 并在 constants.h 中使用 inizalise void

NSArray * check_array_invisible;
NSArray * check_array_editable;
NSArray * check_array_texteingabe;
NSArray * check_array_assistent;
NSArray * check_array_functionfield;
+(void)initialize{
  check_array_invisible = @[@10, @13, @34, @35];
  check_array_editable = @[@1,@2, @3, @4, @5, @6, @7, @9, @11, @14 , @17, @18, @21 ];
  check_array_texteingabe = @[@1, @2, @3, @9, @11, @14];
  check_array_assistent = @[@16, @35];
  check_array_functionfield = @[@32];
}

【问题讨论】:

  • 使用 Objective-C 字面量的 NSArray 初始化器与 C 数组 NSArray * check_array_editable = @[@"1", @"2", @"3" … ]; 一样长,并且您拥有 NSArray 类的全部便利

标签: ios objective-c nsstring


【解决方案1】:

通过您的声明,您的数组是 C 样式数组,因此您将无法使用熟悉的方法,例如 containsObjectindexOfObject,但您应该将其作为 C 样式数组处理并像这样搜索

NSString *s = @"1";
int i = 0;
while(check_array_editable[i]) {
    if( [check_array_editable[i] isEqualToString:s]) {
        NSLog(@"yeah");
        break;
    }
    i++;
}

相反,您可以在您的实现文件中像这样声明数组:

#define check_array_editable@[@"1", @"2", @"3", @"4"]

现在你可以使用indexOfObject等有趣的方法

示例:

NSLog( @"%zd",[arrayOfStrings indexOfObject:@"2"]);

结果:

2015-07-16 11:04:47.620 PROJ[881:13857] 1

更多信息hereherehere

【讨论】:

  • 有效,但我决定使用 NSArray 和初始化程序
【解决方案2】:

您可以使用sizeof 来确定C 数组中的元素数量。取 sizeof 一个 C 数组:

sizeof(check_array_editable)

返回其所有元素的总大小(在您的示例中,答案是 104 [假设为 64 位二进制]);在您的情况下,每个元素都是 NSString *,其大小由下式给出:

sizeof(NSSString *)

这将返回 8 [再次假设 64 位]。只需将总长度除以元素长度即可:

sizeof(check_array_editable) / sizeof(NSSString *)

你会得到数组中元素的数量(在你的例子中是 13)。

重要提示:以上内容适用于声明为数组的变量。使用 C 指针类型声明的变量,然后设置为引用动态分配的内存,可能可用作数组,但它不是数组。采用 sizeof 这样的变量会返回它的大小 - 指针的大小 - 而不是它当前引用的大小。

HTH

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多