【问题标题】:Swift Framework <-> ObjC interoperationSwift 框架 <-> ObjC 互操作
【发布时间】:2014-11-04 08:06:08
【问题描述】:

我有一个 dylib 框架,其中包含一些用 swift 制作的 UIView 子类,我已经完成了使用新的 @IBDesignable@IBInspectable 的东西。

假设我有一个 UITextField 子类,名为 MyTextField.swift,如下所示:

MyTextField.swift

@IBDesignable class MyTextField: UITextField {

    // some properties etc.
    // content is irrelevant   
}

现在它在 InterfaceBuilder 中编译并运行良好,到目前为止非常好。但我需要做的是将这个特殊的子类导入到控制器的 Objective C 实现中,以便在运行时在代码中设置属性。

框架(名为 myViews)有一个名为 myViews.h 的标头,我可以像这样将其导入控制器标头:

MyViewController.h:

@import myViews;

#import <UIKit/UIKit.h>

#import "myViews.h"

@interface MyViewController : UIViewController

@property(weak, nonatomic) IBOutlet MyTextField *txtName; // <-- This is the problem!

@end

这就是我卡住的地方!所以类 MyTextField 从导入的头文件中是未知的。 myViews.h 是自动生成的。我试图在那里导入桥接头但没有成功。

myViews.h:

#import <UIKit/UIKit.h>

//! Project version number for myViews.
FOUNDATION_EXPORT double myViewsVersionNumber;

//! Project version string for myViews.
FOUNDATION_EXPORT const unsigned char myViewsVersionString[];

// In this header, you should import all the public headers of your framework
// using statements like #import <myViews/PublicHeader.h>

#import <myViews/MyTextField-Swift.h> // <-- This is what I've tried to import here which doesn't work as well.

希望有人可以帮助我。提前致谢。

【问题讨论】:

  • 你有机器人 :) 你会碰巧知道如何导出那个 swift 类吗?
  • @AlexanderN 是的,我愿意!

标签: ios objective-c xcode frameworks swift


【解决方案1】:

在你的 Objective-c 类中,尝试像这样导入你的 swift 模块:

#import "&lt;ModuleName&gt;-Swift.h"

其中 ModuleName 是包含 swift 代码的模块的名称

【讨论】:

  • 感谢您的回答。我已经尝试过了,但 Xcode 说'MyTextField-Swift.h' file not found。一般来说,我认为我只需要导入框架,并且在框架头中我需要导入 swift 桥接头。但我还没有成功。
  • 我在使用#import "MyFramework-Swift.h" 导入时也遇到了错误。但是#import &lt;MyFramework/MyFramework-Swift.h&gt; 有效。但要注意,第一部分是产品名称,而头文件名的第一部分是模块名称。它们可能不同。
猜你喜欢
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 2020-08-30
  • 1970-01-01
  • 2017-10-26
  • 2020-09-14
  • 1970-01-01
相关资源
最近更新 更多