'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.
我收到一条错误消息:属性 '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.