2014-06-10 103 views
0

我想要构建一个拥有保存泛型类型对象的数组的类。到目前为止,我一直没有成功。这是我在做什么:无法在Swift语言中实例化泛型类型的数组

class GenericTest<T>: NSObject { 
    var objects = T[]() 
} 

var buffer = GenericTest<String>() 

当我做这个程序编译,预运行时,我得到一个分段错误。如果我不一概而论,编译没有问题

class NonGenericTest: NSObject { 
    var objects = String[]() 
} 

var buffer = NonGenericTest() 

这不是我想,虽然走,因为我有解决这个问题的多种类型的方法。任何想法,为什么这是打破?

+4

如果您必须具有Obj-C兼容性,则不要从'NSObject'继承,在''''类定义中使用'@ objc'前缀。我注意到Swift中的泛型与一些旧的Obj-C构造不搭配。 – Erik

+1

@SiLo如果您将其作为回复,我会将其标记为正确。 – banDedo

回答

3

由于某些原因,在Swift中使用泛型类时,继承自NSObject不是一个好主意。 我会说在任何这样做,除非你绝对必须这样做。如果您需要Obj-C兼容性,请使用@objc前缀(以及将从Obj-C调用的任何方法)标记您的类。

愚蠢,但...是啊:

@objc class MyGeneric<T> 
{ 
    var array = T[]() 
} 

var buffer = MyGeneric<String>() 

您可以用粉底类,如NSStringNSDictionary,你想作为一个泛型类型参数任何其他人,但我会建议不要在一个普通的NSObject继承类定义。