Arrays 我可以创建一个从数组生成子类的类吗?

Arrays 我可以创建一个从数组生成子类的类吗?,arrays,swift,class,inheritance,swift2,Arrays,Swift,Class,Inheritance,Swift2,我正在摆弄一个cocoapod,我正在尝试创建一个从类型数组中派生子类的类 我之所以将它从数组扩展到子类,是因为在Swift中数组和NSArray的处理方式不同 我可以创建这样的类: class Test : NSArray {} let i = myArray.randomObject() 但如果我尝试这样做: class Test : Array {} 或者这个: class Test : [AnyObject] {} 我犯了一个错误 我之所以要这样做,主要是因为我可以使用如下函数:

我正在摆弄一个cocoapod,我正在尝试创建一个从类型数组中派生子类的类

我之所以将它从数组扩展到子类,是因为在Swift中数组和NSArray的处理方式不同

我可以创建这样的类:

class Test : NSArray {}
let i = myArray.randomObject()
但如果我尝试这样做:

class Test : Array {}
或者这个:

class Test : [AnyObject] {}
我犯了一个错误

我之所以要这样做,主要是因为我可以使用如下函数:

class Test : NSArray {}
let i = myArray.randomObject()
与此相比:

let i = Test.randomObject(myArray)

你知道我可以做些什么吗?

你可以通过扩展向数组中添加方法。比如:

extension Array
{
    func randomObject() -> Element { return self[ Int( arc4random_uniform( UInt32( self.count ) ) ) ] }
}
现在可以执行myArray.randomObject,其中myArray的类型为Array


编辑:另外,@Addison正确地指出,结构类型不能在Swift中子类化。

您不能子类化数组,因为它是一个结构。然而,NSArray是一个对象,因此可以将其子类化。我不确定您想要实现什么,但您可能希望遵守CollectionType协议,结构和对象以及枚举都可以做到这一点。

您在这里想要实现什么?从您的示例中,听起来您想要的是一个扩展而不是子类。请注意,arc4random_uniform需要一个UInt32类型的参数,wheras self.count返回Int。self中索引的后续访问也是如此:index需要可索引的Int类型,而arc4random_uniform返回UIn32类型。因此,您需要在上面的示例中包含一些类型转换/初始化。您不能轻易地将NSArray子类化,因为它是一个类集群。创建NSArray/NSMutableArray时,返回对象的类可能是几个私有实现类中的一个。在任何情况下,能够在代码中随处使用标准数组/NSArray并通过扩展对其进行扩展都比在任何地方都使用Array/NSArray的自定义子类要好。好的,谢谢,我从来都不知道NSArray是一流的客户。是的,我同意只使用一个扩展比创建一个新的类或子类要好,但我想解释一下为什么不能将数组子类化