objective-c - Swift 2.0 与 Objective C 的互操作没有按预期工作?

标签 objective-c swift swift2 xcode7 xcode7-beta3

我正在将 Swift 1.2 框架移植到 2.0。在修复了新的 Swift 2.0 错误处理方案带来的 300 万个编译器错误后,我终于能够链接我的测试应用程序(用 Objective C 编写)以使用更新后的框架。

Xcode 版本 7.0 beta 3 (7A121l)

但是,我遇到了一个问题。一些 Swift 函数不再生成到由 Objective C 测试应用程序使用的自动生成的 Objective C header (MyFramework-Swift.h) 中。

这是一个未公开的函数示例:(我的实际框架函数返回一个枚举,但我试图简化以更清楚地说明问题)。

public func calculateImportantValueDangerously() throws -> Int  
{  
    return 42  
}  

请注意,像下面这样的其他函数实际上会按预期公开(并且可以被调用):

public func doSomething()  
{  
}  

public func doSomethingDangerous() throws  
{  
}  

public func calculateMeaninglessValue() -> Int  
{  
    return -1  
}  

这是 Objective C 方面:

MyClass *newInstance = [[MyClass alloc] init];  
[newInstance doSomething];  

NSError *error = nil;  
[newInstance doSomethingDangerousAndReturnError:&error];  

long meaninglessValue = [newInstance calculateMeaninglessValue];  
NSLog(@"%ld", meaninglessValue);  

long importantValue = [newInstance calculateImportantValueDangerouslyAndReturnError:&error]; <-COMPILE ERROR
NSLog(@"%ld", importantValue);  

观看此视频后,我曾预计它应该“正常工作”:

https://developer.apple.com/videos/wwdc/2015/?id=401

...但似乎我们目前不能使用既抛出又返回值的函数。

这是错误还是未实现的功能?如果我遗漏了发行说明中的​​某些内容,我深表歉意。

感谢任何建议。

最佳答案

这是不可能的。

如果您使用 @objc 注释您的方法,您将看到问题。

Throwing method cannot be marked @objc because it returns a value of type 'Int'; return 'Void' or a type that bridges to an Objective-C class

您只能返回对象,不支持原语。

关于objective-c - Swift 2.0 与 Objective C 的互操作没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31416725/

相关文章:

ios - 如何在 CoreData 中使用 NSPredicate 进行排序和限制?

swift - 获取 Playground 以显示所有循环结果

ios - 当 View 出现时执行函数 - Swift

arrays - Swift 1/2 自动完成字段不区分大小写

ios - 如何知道用户没有触摸键盘?

html - 在Swift 2.0中读取HTML文件

iOS 9 改变了 View 加载行为

iphone - iPhone-如何测试每个内存调用返回的分配对象?

ios - swift 。继承对象的集合

objective-c - 如何在 Objective-C 中实现面向服务的架构?