Swift框架<->ObjC互操作

6
我有一个使用Swift编写的dylib框架,其中包含一些UIView子类,我已经使用了新的@IBDesignable和@IBInspectable功能。
假设我在这里有一个名为MyTextField.swift的UITextField子类,如下所示:
@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 类吗? - Alex Nolasco
@AlexanderN 是的,我有! - dibi
1个回答

0
在你的Objective-C类中,尝试像这样导入你的Swift模块: #import "<ModuleName>-Swift.h" 其中ModuleName是包含Swift代码的模块名称。

谢谢你的回答。我已经尝试过了,但是Xcode显示“'MyTextField-Swift.h'文件未找到”。一般来说,我认为我只需要导入框架,在框架头文件中导入Swift桥接头文件即可。但是我还没有成功。 - dibi
我在使用#import "MyFramework-Swift.h"导入时遇到了错误。但是#import <MyFramework/MyFramework-Swift.h>可以正常工作。但要注意,第一部分是产品名称,而头文件名的第一部分是模块名称。它们可能不同。 - Felix Lieb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接