0

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

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)
                }
            }

        }

数据管理器.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 类以及@objc之前 class func clientChatLoad应该将 Swift 代码暴露给我的 Objective C 类......但我仍然收到一个错误。我可能忽略了什么?

4

2 回答 2

2

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

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

于 2017-03-09T14:36:10.633 回答
1

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

于 2017-03-09T14:34:55.930 回答