Objective c ';在类型为';创建目标C到Swift Bridge时

Objective c ';在类型为';创建目标C到Swift Bridge时,objective-c,swift,swift3,objective-c-swift-bridge,Objective C,Swift,Swift3,Objective C Swift Bridge,我收到一个错误,说明:在使用以下实现时,在“DataManager”类型的对象上找不到属性“clientChatLoad”: AppDelegate.m 数据管理器.swift 据我所知,将@class DataManager添加到我的目标C类以及class func clientChatLoad之前的@objc应将Swift代码公开给我的目标C类。。。但我仍然收到一个错误。我可能忽略了什么 确保您的DataManager类继承自NSObject。您应该很好。确保您的DataManager类继承

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

AppDelegate.m 数据管理器.swift
据我所知,将
@class DataManager
添加到我的目标C类以及
class func clientChatLoad
之前的
@objc
应将Swift代码公开给我的目标C类。。。但我仍然收到一个错误。我可能忽略了什么

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

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

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


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

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


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

你的代码毫无意义。你的
AppDelegate.m
代码应该在Objective-C中,但它在Swift中。你的Objectivee-C.m文件#导入生成的-Swift.h桥接头?是。(我更新了代码段以反映这一点。)但是仍然没有意义,因为您的
DataManager.clientChatLoad
调用是Swift,而不是Objective-C。而且,Objective-C.m文件永远不需要包含
@class
声明。请努力显示您的真实代码。我可以如何在Objective C中执行此操作?查看其他代码示例,似乎我需要d按照以下方式执行操作:DataManager*dataMan=[DataManager new];[dataMan clientChatLoad];但是,结果是错误的:类消息的接收者“DataManager”是一个转发声明。您的代码毫无意义。您的
AppDelegate.m
代码应该在Objective-C中,但它在Swift中。您的Objective-C.m文件是否导入生成的-Swift.h桥接头?是。(我更新了代码片段以反映这一点。)但是仍然没有意义,因为您的
DataManager.clientChatLoad
调用是Swift,而不是Objective-C。而且,Objective-C.m文件永远不需要包含
@class
声明。请努力显示您的真实代码。我可以如何在Objective C中执行此操作?查看其他代码示例,似乎我需要d按照:DataManager*dataMan=[DataManager new];[dataMan clientChatLoad];但是结果是错误:类消息的接收者“DataManager”是一个转发声明抱歉(我对这两种语言都很陌生)这是按照:class func clientChatLoad的思路吗(chatId:NSObject,Int,completionHandler:@escaping(Data?,NSError?)->())->URLSessionTask{抱歉(我对这两种语言都很陌生)这是不是类似于:class func clientChatLoad(chatId:NSObject,Int,completionHandler:@escaping(Data?,NSError?->())->URLSessionTask{感谢您的澄清-我将后退两步,重新思考方法,并以更好的实现返回。非常感谢。-完整的iOS noob。感谢您的澄清-我将后退两步,重新思考方法,并以更好的实现返回。非常感谢。-完整的iOS noob。
 #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)
                }
            }

        }
    ...

   @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"

    ...