两者有什么区别
What is difference btw the two
通常当我想要用逗号分隔的字符串数据数组时,我会这样做:
NSArray *array1 = [obj1 componentsSeparatedByString:@","];
但是一些程序员这样做了:
NSArray <NSString *>*array1 = [obj1 componentsSeparatedByString:@","];
两者都有效,但我想知道哪个更好,为什么。
后一种语法是"lightweight generic"。这意味着当你处理这个集合时,它知道你正在处理 NSString *
个对象的集合。所以它知道 array1[0]
必须是 NSString
.
通过这样做,如果您不小心使用了不是 NSString
方法的方法,您可能会收到编译器警告。您还享受更好的代码完成,只显示该 class 的方法和属性。此外,如果您正在处理可变数组,如果您添加了错误类型的对象,编译器可能会警告您。
最重要的是,轻量级泛型在 Objective-C 中不是必需的,但您只需利用编译器的能力来推断您预期在集合中使用的类型。它不会像您在 Swift 泛型中看到的那样强制执行任何运行时强类型(这就是它被称为 "lightweight" 的原因),但它提供了更有意义的编译时警告和代码完成。
有关详细信息,请参阅
通常当我想要用逗号分隔的字符串数据数组时,我会这样做:
NSArray *array1 = [obj1 componentsSeparatedByString:@","];
但是一些程序员这样做了:
NSArray <NSString *>*array1 = [obj1 componentsSeparatedByString:@","];
两者都有效,但我想知道哪个更好,为什么。
后一种语法是"lightweight generic"。这意味着当你处理这个集合时,它知道你正在处理 NSString *
个对象的集合。所以它知道 array1[0]
必须是 NSString
.
通过这样做,如果您不小心使用了不是 NSString
方法的方法,您可能会收到编译器警告。您还享受更好的代码完成,只显示该 class 的方法和属性。此外,如果您正在处理可变数组,如果您添加了错误类型的对象,编译器可能会警告您。
最重要的是,轻量级泛型在 Objective-C 中不是必需的,但您只需利用编译器的能力来推断您预期在集合中使用的类型。它不会像您在 Swift 泛型中看到的那样强制执行任何运行时强类型(这就是它被称为 "lightweight" 的原因),但它提供了更有意义的编译时警告和代码完成。
有关详细信息,请参阅