正如标题所说,我在使用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等都可以访问。