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 它们应该是 NSObject
或 NSObjectProtocol
将协议定义更改为
@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)
}
我在 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 它们应该是 NSObject
或 NSObjectProtocol
将协议定义更改为
@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)
}