Objective c Swift 2.0与目标C的互操作未按预期工作?

Objective c Swift 2.0与目标C的互操作未按预期工作?,objective-c,swift,swift2,xcode7,xcode7-beta3,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标题(MyFramework Swift.h)中 下面是一个未公开的函数示例:(我的实际框架函数返回了一个枚举,但我试图简化以更

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

Xcode版本7.0 beta 3(7A121l)

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

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

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

这是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);  
MyClass*newInstance=[[MyClass alloc]init];
[newInstance doSomething];
n错误*错误=nil;
[新实例doSomethingDangerousAndReturnError:&错误];
long meaninglessValue=[newInstance CalculateMeninglessValue];
NSLog(@“%ld”,无意义值);
long importantValue=[newInstance CalculateImportantValueAndReturnError:&error] 这是不可能的

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

无法将抛出方法标记为@objc,因为它返回的值为 输入“Int”;返回“Void”或连接到Objective-C的类型 阶级


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

尽管所选答案正确;您不能为抛出函数返回Int,我想指出另一种解决方案,因为苹果在CoreData框架中的函数也存在同样的问题:

func countForFetchRequest(request: NSFetchRequest, error: NSErrorPointer) -> Int

请注意,在这种情况下,苹果没有使用抛出模式,而是恢复到经典的NSError out参数机制。

Ah我应该更清楚-将更新问题。我实际上查看了生成的myframeworkswift.h。函数不以CalculateImportValueAndReturnErrorWow的形式存在。好的。我的框架类继承自NSObject,但我想这还不足以产生有意义的错误消息。用@objc标记函数暴露了编译错误。还是觉得这样很糟糕。
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);  
func countForFetchRequest(request: NSFetchRequest, error: NSErrorPointer) -> Int