首页 > 解决方案 > 如何在 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

如何解决?

标签: swiftobjective-c

解决方案


实际上,您唯一的问题是 Objective-C 中协议的语法不正确。正确地,符合协议的类型应该这样写:

id<ModelProtocol> protocol = [factory create];

推荐阅读