Ash*_*wal 1 objective-c swift swift-protocols
我有一个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
Run Code Online (Sandbox Code Playgroud)
我正在我的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)")
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个编译错误:
无法分配属性:'self'是不可变的
当我删除线条
client = Client.setup() as! Client
client.clientDelegate = self
Run Code Online (Sandbox Code Playgroud)
代码编译并调用Client类中receivedMessageFromClient的方法,该方法又转发消息,但不调用该方法HomeViewController.除了将self指定为委托之外,似乎所有设置都已设置.
查看我对您的问题的评论,但这是在Swift中实现的Objective-C委托的基本示例:
Objective-C的:
@protocol MyDelegate <NSObject>
@optional
- (void)canImplementThis:(int)aVar;
@required
- (BOOL)needToImplementThis;
@end
@interface MyClass : NSObject
@property (nonatomic, weak) id<MyDelegate> delegate;
@end
Run Code Online (Sandbox Code Playgroud)
迅速:
class SwiftClass : UIViewController, MyDelegate {
var myObj : MyClass?
override func viewDidLoad() {
super.viewDidLoad()
myObj = MyClass()
myObj?.delegate = self
}
// MARK: - <MyDelegate>
func canImplementThis(aVar : Int) {
print("Called: \(aVar))
}
func needToImplementThis() -> Bool {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
原谅我输入的所有错别字直接进入SO.
| 归档时间: |
|
| 查看次数: |
5776 次 |
| 最近记录: |