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