【发布时间】:2015-11-20 08:16:33
【问题描述】:
我有一个 Objective C 类,它的方法如下所示:
@class Client;
@protocol ClientDelegate <NSObject>
@optional
-(void) receivedMessageFromClient : (id) message;
@end
@interface Client : NSObject
+(id) setup;
@property(nonatomic, strong) id <ClientDelegate> clientDelegate;
// more method declarations below
我正在我的 Swift 类中实现 ClientDelegate,如下所示:
class HomeViewController: UIViewController, ClientDelegate {
var client : AnyObject?
var delegate: ClientDelegate?
override func viewDidLoad() {
super.viewDidLoad()
client = Client.setup() as! Client
client.clientDelegate = self
}
func receivedMessageFromClient(message: AnyObject) {
print("Message recieved: \(message)")
}
}
这给了我一个编译错误:
无法分配给属性:'self' 是不可变的
当我删除线条时
client = Client.setup() as! Client
client.clientDelegate = self
代码编译并调用Client类中的方法,该方法依次向receivedMessageFromClient发送消息,但HomeViewController中没有调用该方法。除了将 self 指定为代表之外,似乎一切都已设置好。
【问题讨论】:
-
代表通常具有
weak属性而不是strong。还有 RTFM 关于协议developer.apple.com/library/ios/documentation/Swift/Conceptual/… -
你有桥接头吗?
-
是的,它正在工作。我可以调用和使用类的方法
-
阅读您的代码,我认为您需要修改委托模式check this out。您首先需要在目标 c 中整理您的委托,然后在 Swift 中实现它。
标签: objective-c swift swift-protocols