2017-09-04 123 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