swift - 如何在 Objective-C 中使用 swift 协议实现?
问题描述
我是 iOS 新手。我有一个库,我在我的应用程序中使用 Swift 和 Objc 文件(我已正确连接我的库,包括 *-Swift.h 文件)。
所以,我的lib有这样的结构
工厂
import Foundation
@objc public class Factory : NSObject{
@objc public func create() -> ModelProtocol
{
return FirstModel()
}
}
模型协议
import Foundation
@objc public protocol ModelProtocol
{
func foo()
}
第一个模型
import Foundation
public class FirstModel : NSObject, ModelProtocol
{
public func foo() {
//Do some things here
}
}
当我尝试在 Swift 端使用这个工厂时,一切正常
import Foundation
import Lib
class TestClass {
public init(){}
func boo()
{
let factory = Factory()
let _: ModelProtocol = factory.create()
}
}
但是当我尝试在 Objc 端做同样的事情时,我得到了一个错误
Use of undeclared identifier 'ModelProtocol'
#import <Foundation/Foundation.h>
#import "Lib-Swift.h"
@implementation ViewController : NSObject
- (void)foo {
Factory *factory = [Factory new];
ModelProtocol *protocol = [factory create];
}
@end
我还将这两个项目(lib 和应用程序)放在我的驱动器上https://drive.google.com/drive/folders/1-DMYMhTqTqpgHcp31DNVby7US46OXUYM?usp=sharing
如何解决?
解决方案
实际上,您唯一的问题是 Objective-C 中协议的语法不正确。正确地,符合协议的类型应该这样写:
id<ModelProtocol> protocol = [factory create];
推荐阅读
- reactjs - 无法将 multipart/form-data 发送到 nodejs 服务器
- javascript - 如果 div 内的元素超过 div 宽度会发生什么
- angular - 编译期间找不到角度导出的枚举
- machine-learning - 使用 onnx 模型在 Arm NN android 上运行推理
- python - 为什么比特币椭圆曲线上的这个特殊点看起来不属于那个椭圆曲线?
- linux - 从文件列中读取 x,y,转换为 r, θ 并保存在同一文件的不同列中
- c# - 发生异常时如何获取 IL 指令偏移量?
- r - 如何获取R中二维表中元素的两个轴的名称
- android - 如何通过不同的资源获取引用资源的 ID?
- json - PowerShell - JSON 格式查询 - “收到无效的 JSON 有效负载”