斯威夫特协议错误
问题描述:
我在斯威夫特文件中声明:斯威夫特协议错误
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;
答
您使用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)
}
答
project-swift.h
将不会生成/更新,直到您的应用程序没有错误。如果应用程序构建失败,则不会更新project-swift.h
。
它是一种死锁场景。
解决方案:
步骤1:删除协议在目标的确认 - C文件
#import <Project-Swift.h>
@interface ChatManager() /*<SocketManagerDelegate> delete this*/
@end
步骤2:现在清洁并重新构建项目
步骤3:现在检查Project-Swift.h,现在应该有你的协议声明
第4步:现在确认你的协议r目标-C文件和构建。
编辑:
斯威夫特构建你的协议并不出现在项目-Swift.h他们要么是NSObject
或NSObjectProtocol
的协议高清更改为
@objc protocol SocketManagerDelegate : NSObjectProtocol {
func webSocketDidReceiveMessage(message:Message)
func socketWasReconnected()
func webSocketDidFailWithError(error:String)
}
答
确认objC。在迅速和objC协议不同
附加CLAS到您的协议:
@objc protocol SocketManagerDelegate: class {
func webSocketDidReceiveMessage(message:Message)
func socketWasReconnected()
func webSocketDidFailWithError(error:String)
}
UPDATE
还添加标志@objc
+1
单独添加'class'并不能解决问题。必须在开始处添加“@ objc”。 – Gal
尝试@objc协议SocketManagerDelegate替换代码:类{} –
@MikeAlter您的解决方案并获得成功。谢谢。添加一个答案,我会接受它。 – Gal
欢迎,添加下面的答案 –