【问题标题】:Check Objective-C generics type in for loop (fast enumeration)在 for 循环中检查 Objective-C 泛型类型(快速枚举)
【发布时间】:2020-02-04 11:14:47
【问题描述】:

是否有任何编译器选项警告 for-in 循环中的类型错误?

    NSArray<NSString *> *stringsArray = @[ @"Hello", @"World" ];
    for (UIView *wrongType in stringsArray) {
        NSLog(@"object: %@", wrongType);
    }

【问题讨论】:

  • 没有。你无能为力。
  • 哦...我现在明白你的意思了,我的错误。对不起...
  • 你可以在for-in语句中使用typeof(stringsArray.firstObject)代替显式类型
  • 您能否确认...您是否希望编译器检查循环中代码中指定的类型与数组中的类型是否相同?或者您是否在检查该数组是否不包含任何 UIView(例如)?

标签: objective-c typechecking fast-enumeration


【解决方案1】:

由于 NSArray 可能包含多个类的对象,因此编译器无法在这样的 for 循环中检测到错误的类。

来源 - iOS 编程:大书呆子牧场指南

【讨论】:

  • 为什么编译器不能检查?我的 NSArray 参数化为NSString*。 (我知道运行时无法检查,因为类型已被删除。)
  • 我想我没有足够的知识来回答为什么。在您的情况下,如果您将一些 UIView 对象添加到您的 stringsArray - 它将在 for 循环中处理。其他类型不会。
猜你喜欢
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多