【发布时间】:2015-09-04 21:57:29
【问题描述】:
假设我在 Swift 中定义了一个泛型类,类似于以下内容:
class MyArray<T> {
func addObject(object: T) {
// do something... hopefully
}
}
(我知道有一个稍微更好的数组实现,这只是一个例子。)
在 Swift 中,我现在可以非常轻松地使用这个类:
let a = MyArray<String>()
a.addObject("abc")
With Xcode 7, we now have generics in Objective-C,所以我假设我可以在 Objective-C 中使用这个类:
MyArray<NSString*> *a = [[MyArray<NSString*> alloc] init];
[a addObject:@"abc"];
但是,MyArray 从未添加到我的Project-Swift.h 文件中。即使我将其更改为从 NSObject 继承,它仍然不会出现在我的 Swift.h 文件中。
有没有办法创建一个通用的 Swift 类,然后在 Objective-C 中使用它?
更新:如果我尝试从 NSObject 继承并使用 @objc 进行注释:
@objc(MyArray)
class MyArray<T>: NSObject {
func addObject(object: T) {
// do something... hopefully
}
}
我收到以下编译器错误:
“@objc”类的通用子类不能有显式的“@objc”属性,因为它们在 Objective-C 中不直接可见。
这是否意味着没有办法在 Objective-C 中使用通用的 Swift 类?
如何直接引用类?
【问题讨论】:
-
你用@objc注释你的类了吗?
-
@MrBeardsley 我刚试了一下,它给出了一个有趣的编译器错误(见上文)。
标签: ios objective-c swift generics