'Property not found on object of type' 在创建 Objective C 到 Swift 桥时

'Property not found on object of type' when creating Objective C to Swift Bridge

我收到一条错误消息:属性 'clientChatLoad' 在使用以下实现时未在 'DataManager' 类型的对象上找到:

AppDelegate.m

 #import "IOS_Project_Name-Swift.h"

@class DataManager;

...

    DataManager.clientChatLoad(0){ data, error in
        guard data != nil else {
            print(error)
            return
        }

        guard let data = data else { return }
        let json = JSON(data: data)

        if let result = json["success"].bool{
            if (result){

                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
                    NSNotificationCenter.defaultCenter().postNotificationName("refreshChatDetails", object: nil, userInfo:nil)
                }
            }

        }

DataManager.swift

    ...

   @objc class func clientChatLoad(_ chatId: Int, completionHandler: @escaping (Data?, NSError?) -> ()) -> URLSessionTask {
        // AJ TO-DO
        var defaults = UserDefaults.standard
        let URL = Foundation.URL(string: chatUrl)!
        var request = URLRequest(url: URL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 3.0)
        request.httpMethod = "POST"

    ...

根据我的理解,将 @class DataManager 添加到我的 Objective C class 以及 class func clientChatLoad 之前的 @objc 应该公开 Swift 代码到我的 Objective C class... 但我仍然收到错误消息。我可能忽略了什么?

确保您的 DataManager class 继承自 NSObject。你应该好好的。

起初我以为你的代码只是某种印刷错误,但在评论中的讨论过程中我开始意识到它是真实的并且你试图把 Swift 代码到 Objective-C 文件 (即 AppDelegate.m)。你不能这样做! Objective-C 文件必须完全写入 Objective-C!

我怀疑你是否真的需要一个混合应用程序(一个用两种语言编写的应用程序)。如果您只选择一种语言并用该语言编写整个应用程序,您的生活将会简单得多。但是,如果您 将拥有一个混合应用程序,则需要学习 Objective-C 并在 Objective-C Objective-C.