【发布时间】:2015-05-05 09:46:21
【问题描述】:
我在 NSManagedObject 上有一个简单的 Swift 扩展,其中我有一个用于查找单个对象的参数化方法 - 签名看起来像:
public class func findFirst<T:NSManagedObject>(inContext context : NSManagedObjectContext? = .None) -> T?
我试图从 Objective-C 中调用它,但似乎看不到它。如果我创建一个非参数化版本,我可以从 Objective-C 中看到并调用它:
public class func findFirstUntypedWithPredicate(predicate:NSPredicate?, inContext context : NSManagedObjectContext? = .None) -> NSManagedObject?
ObjectiveC 有什么方法可以达到调用的参数化版本?
我会像这样使用 Self:
public class func findFirst(inContext context : NSManagedObjectContext? = .None) -> Self?
使用此处找到的技术:
How can I create instances of managed object subclasses in a NSManagedObject Swift extension?
但是,这会导致 Swift 编译器在编译代码(Xcode 6.3.1 或 Xcode 6.4 beta 2)时出现段错误。
编辑:这是我正在尝试构建的框架的完整源代码的链接,包括模板化方法导致的额外 Swift 编译器崩溃:
https://www.dropbox.com/s/fixaj9ygdoi4arp/KiGiCoreData.zip?dl=0
【问题讨论】:
-
泛型不能在 Objective-C 中使用,请参阅 developer.apple.com/library/ios/documentation/Swift/Conceptual/… 中的“在 Objective-C 中使用 Swift”。 - 我不清楚你问题的第二部分。引用的代码是否会导致编译器崩溃或基于此的代码?你能举个例子来说明这个问题吗?
-
基于 Self 的引用代码导致编译器崩溃,是的。非常可悲,因为我认为这将完全按照我的意愿工作。稍后我会在运行更多测试后上传一个示例项目,并确保最新的 XCode 测试版无法解决此问题。
-
我再次检查了来自stackoverflow.com/a/27112385/1187415 的代码。它按预期编译和工作。我添加了一个
findFirst()变体作为答案,希望这就是你要找的。span>
标签: objective-c swift generics