在为Swift Bridge创建Objective C时,'在类型对象上找不到属性'

时间:2017-03-09 14:30:11

标签: objective-c swift swift3 objective-c-swift-bridge

我收到一条错误说明:使用以下实现时,在'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)
                }
            }

        }

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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