2017-09-04 124 views
1

我在斯威夫特文件中声明:斯威夫特协议错误

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......... 

我得到这个错误:

enter image description here

无法弄清楚这一点。想法?

在我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; 
+1

尝试@objc协议SocketManagerDelegate替换代码:类{} –

+0

@MikeAlter您的解决方案并获得成功。谢谢。添加一个答案,我会接受它。 – Gal

+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

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他们要么是NSObjectNSObjectProtocol

的协议高清更改为

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

确认objC。在迅速和objC协议不同

附加CLAS到您的协议:

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

UPDATE

还添加标志@objc

+1

单独添加'class'并不能解决问题。必须在开始处添加“@ objc”。 – Gal