Swift 协议错误

Swift protocol error

我在 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;
在您的应用程序没有错误之前,

project-swift.h 不会是 generated/updated。如果应用程序构建失败 project-swift.h 将不会更新。

这是一种死锁场景。

解法:

第一步:删除Objective-C文件中的协议确认

#import <Project-Swift.h>

@interface ChatManager () /*<SocketManagerDelegate> delete this*/
@end

第 2 步:现在清理并重新构建项目

第 3 步:现在检查 Project-Swift.h 现在应该有您的协议声明

第 4 步:现在确认您的 Objective -C 文件中的协议并构建。

编辑:

Swift 构造出现在 Project-Swift.h 它们应该是 NSObjectNSObjectProtocol

将协议定义更改为

@objc protocol SocketManagerDelegate : NSObjectProtocol {
   func webSocketDidReceiveMessage(message:Message)
   func socketWasReconnected()
   func webSocketDidFailWithError(error:String)
}

您的协议未确认 objC。 swift 和 objC 中的协议不同

将类添加到您的协议中:

@objc protocol SocketManagerDelegate: class {
   func webSocketDidReceiveMessage(message:Message)
   func socketWasReconnected()
   func webSocketDidFailWithError(error:String)
}

更新

同时添加标志@objc

您正在使用 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)
}