У меня есть Objective класс C, который имеет методы, которые выглядят следующим образом:Реализация Objective C делегата Swift
@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
Я реализации ClientDelegate в моем Swift класса, как это:
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)")
}
}
Этот дает мне ошибку компилирования:
Cannot assign to property: 'self' is immutable
Когда я удалить строки
client = Client.setup() as! Client
client.clientDelegate = self
код компилируется и вызывает метод в классе Client, который в свою очередь посылает сообщение receivedMessageFromClient
, но этот метод не вызывается в HomeViewController
. Кажется, что все настроено, за исключением того, что я назначаю себя делегатом.
Делегатов обычно имеет 'weak' атрибут вместо' strong'. И RTFM о протоколах https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html – Alexmelyon
Возможный дубликат [Я использую классы объектного класса в swift2, как я могу реализовать методы делегирования и связать этот делегат] (http://stackoverflow.com/questions/33774912/i-am-using-objective-c-classes-in-swift2-how-i-can-implement-delegate-methods) –
у вас есть мостовой заголовок? –