【问题标题】:Integrate swift in objective c framewok在objective c框架中集成swiftui
【发布时间】:2015-09-29 21:20:22
【问题描述】:

我正在创建一个客观的框架,并希望在其中集成一些快速代码。根据官方文件。 (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_78)

因为为框架目标生成的标头是框架公共接口的一部分,所以只有标有 public 修饰符的声明才会出现在为框架目标生成的标头中。您仍然可以在框架的 Objective-C 部分中使用标记为 internal 修饰符的 Swift 方法和属性,只要它们是在从 Objective-C 类继承的类中声明的。

但是,我发现无法访问 swift 的内部部分,例如:

@objc 内部类 A:NSObject {}

【问题讨论】:

  • 当您寻求帮助时,请附上一个明确的问题。
  • 大声笑,谢谢!我不知道我在打字时在想什么:O

标签: ios swift frameworks


【解决方案1】:

引用说“您仍然可以使用标有 internal 修饰符的 Swift 方法和属性”(强调)。在您的示例中,它是internal(不是方法或属性)。如果您创建类public 并添加一个内部方法,您应该能够访问该方法。

编辑:以下对我有用:

斯威夫特:

@objc public class MyClass : NSObject {
    internal func bar() -> String { return "foobar" }
}

目标-C:

#import "MyApplication-Swift.h"

MyClass *foo = [[MyClass alloc] init];
NSLog(@"%@", [foo bar]);

请注意,必须为生成的MyApplication-Swift.h 构建代码才能更新。

【讨论】:

  • 好吧,我刚刚做了一个实验,我声明了一个类:\@objc public class A: NSObject { \@objc internal func methodA(){} } 并且该方法仍然无法从目标访问C。在自动生成的 Module-Swift.h 文件中,有一个没有方法的 A 类声明,我想这就是我无法从目标 c 访问该方法的原因。但是,我不知道我还能做些什么来在同一框架中访问 swift,有什么建议吗?
  • @tzx7788 查看更新的答案——对我有用。也许您没有重新构建标题?
  • hmm..,这很奇怪,我仔细检查了它对我不起作用:(。但是更具体地说,我正在研究框架而不是应用程序。你是否也在框架中这样做?(这种情况下的申请对我来说也很好)
  • @tzx7788 尝试使用框架时,XCode 不会提示我在 Objective-C 项目中创建 Swift 文件时添加桥接头。可能是它也没有设置任何用于正确创建MyFramework-Swift.h 的幕后机制。也许尝试将项目创建为应用程序,设置 swift,然后只需更改代码并将目标构建到框架中? (并向 Apple 提交错误报告。)
  • 谢谢,结果我放弃了mix swift和objective c。该框架将是纯粹的客观 c。
猜你喜欢
  • 2010-11-18
  • 2017-01-27
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多