在Cocoa/Objective-C中是否有类似通用列表的东西?

Tal*_*ode 30 cocoa list objective-c strong-typing data-structures

我在C#中真正喜欢的是通用列表.一个只能包含一种对象的列表.在Cocoa/Objective-C中有类似通用列表的东西吗?到目前为止,我只知道NSArray谁将指向任何对象.

Mik*_*lah 34

在Cocoa应用程序中想要这通常是设计薄弱的标志.

NSArray是不可变的,因此它不会"获取指向任何对象的指针",并且可能在交给您时已包含正确的对象.我认为您更担心的是NSMutableArray您认为代码的其他部分可能会添加错误类型的对象.但是看看Cocoa本身; 将可变数组暴露为类设计的一部分是非常罕见的.

相反,您通常会公开NSArray一些修改该数组的方法.有点像:

@class Foo : NSObject
- (NSArray *)bars;
- (void)addBar:(Bar *)bar;
- (void)removeBar:(Bar *)bar;
@end
Run Code Online (Sandbox Code Playgroud)

这通常只是通过编译器警告来阻止插入错误的对象,然后当然可以在内部添加断言-addBar:,-removeBar:如果您也希望.

  • 仿制药不是一种弱设计,想要它们并不是设计薄弱的标志.它们恰好不适用于Objective-C.你的其余部分是有帮助的,但开场陈述是完全错误和误导. (35认同)
  • -1非常不同意 - 否认将C#泛型添加到Objective C会 (12认同)
  • ......是一个明确的改进.强类型和动态类型的语言支持是互补技术.预测:Objective C将在一天内实现C#样式泛型. (11认同)
  • 所以你对此的看法是"这是不必要的,并且希望它是一个弱设计的标志.当你可以通过定义一个繁琐的额外类而不是其自身的目的是模拟一个通用数组时,你为什么需要它呢?只有特定类型的代码行数很多很多倍?" 这似乎令人难以置信的asinine. (2认同)

Fer*_*cio 9

Objective-C不支持通用编程.您总是可以使用Objective-C++和STL列表.