我在Swift文件中声明了protocol
:
protocol SocketManagerDelegate {
func webSocketDidReceiveMessage(message:Message)
func socketWasReconnected()
func webSocketDidFailWithError(error:String)
}
import Foundation
import MDWamp
import SSKeychain
@objc(SocketManager)
class SocketManager: NSObject, MDWampClientDelegate{
static let instance = SocketManager()
var delegate:SocketManagerDelegate?
我想在ObjC文件中使用该协议:
#import <Project-Swift.h>
@interface ChatManager () <SocketManagerDelegate>
@end
@implementation ChatManager.........
我收到此错误:
无法解决这个问题。想法?
在我的project-swift.h
文件中,变体delegate
根本没有显示:
SWIFT_CLASS_NAMED("SocketManager")
@interface SocketManager : NSObject <MDWampClientDelegate>
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong)
SocketManager * _Nonnull instance;)
+ (SocketManager * _Nonnull)instance SWIFT_WARN_UNUSED_RESULT;
@property (nonatomic, strong) MDWamp * _Null_unspecified wampConnection;
@property (nonatomic, readonly, copy) NSString * _Nonnull socketUrlSecure;
@property (nonatomic, readonly, copy) NSString * _Nonnull socketUrl;
答案 0 :(得分:2)
您正在使用swift协议
protocol SocketManagerDelegate {
func webSocketDidReceiveMessage(message:Message)
func socketWasReconnected()
func webSocketDidFailWithError(error:String)
}
不能在没有
的obj-c中使用 @Objc
声明
请用
替换您的代码@objc protocol SocketManagerDelegate:class {
func webSocketDidReceiveMessage(message:Message)
func socketWasReconnected()
func webSocketDidFailWithError(error:String)
}
答案 1 :(得分:1)
project-swift.h
。如果应用程序构建失败,project-swift.h
将不会更新。
它是一种死锁情景。
解决方案:
步骤1:删除Objective-C file
中的协议确认#import <Project-Swift.h>
@interface ChatManager () /*<SocketManagerDelegate> delete this*/
@end
第2步:现在清理并重新构建项目
步骤3:现在检查Project-Swift.h,它现在应该有你的协议声明
步骤4:现在确认Objective -C文件中的协议并构建。
修改强>
Swift构造出现在Project-Swift.h中,它们应该是NSObject
或NSObjectProtocol
将协议def更改为
@objc protocol SocketManagerDelegate : NSObjectProtocol {
func webSocketDidReceiveMessage(message:Message)
func socketWasReconnected()
func webSocketDidFailWithError(error:String)
}
答案 2 :(得分:1)
您的协议未确认objC。 swift和objC中的协议是不同的
在你的协议中添加clas:
@objc protocol SocketManagerDelegate: class {
func webSocketDidReceiveMessage(message:Message)
func socketWasReconnected()
func webSocketDidFailWithError(error:String)
}
<强>更新强>
还添加标记@objc