在Objective-C Framework中声明的协议在Swift中不可见

时间:2017-07-07 15:55:18

标签: objective-c swift frameworks

正如标题所说,我在使用Swift应用程序中的Objective-C框架中声明的协议时遇到了麻烦。我将在下面详细描述这种情况。

我有一个混合了Objective-C和Swift代码的框架。

这与我在协议定义文件中的内容类似。

// MyLibrary.h

@protocol MyDelegate <NSObject>;

@interface ClassThatUsesMyDelegate
@property (weak, nonatomic, nullable) id<MyDelegate>delegate;
@end

@protocol MyDelegate
- (void)aMethod;
@end

Objective-C代码包含在一个模块中:

// module.modulemap

module MyObjCLibrary {
    header "MyLibrary.h"
    export *
}

然后我有通过import MyObjCLibrary使用Objective-C代码的Swift代码,其中MyLibrary.h上面声明的所有内容都是可见的和可用的。

框架的标题为#import "MyLibrary.h"。哪个应该将MyLibrary.h的所有代码公开给使用我的框架的任何人。

以下是问题的开始。当我在测试应用中嵌入此框架时,我可以使用我的库中的任何Swift代码以及ClassThatUsesMyDelegate中的MyLibrary.h。 Howerver,当我尝试使用协议MyDelegate时,我收到一个编译器错误,表明此类型尚未声明。以下用法示例:

// MyViewController.swift

import UIKit
import MyFramework

class MyViewController: UIViewController {
    ...
}

extension MyViewController: MyDelegate { // Error: Use of undeclared type 'MyDelegate'
    func aMethod() {
        ...
    }
}

编辑:这似乎仅适用于协议,其他所有内容如varibles,classes,enums等都可以访问。

0 个答案:

没有答案