Tôi tự hỏi tương đương Swift là gì khi gọi phương thức trên id
trong đó tính sẵn có của phương pháp được xác định khi chạy. Cụ thể là tôi đang tìm cách để làm mô hình này trong Swift:Tương đương nhanh như thế nào để thiết lập các thuộc tính trên `id`?
-(IBAction) handleEvent:(id) sender {
BOOL didDisable = NO;
if([sender respondsToSelector:@selector(setEnabled:)]) {
[sender setEnabled:NO];
didDisable = YES;
}
[self doSomethingAsyncWithCompletionHandler:^{
if(didDisable) {
[sender setEnabled:YES];
}
}];
}
Vấn đề lớn nhất là setEnabled:
được nhập Swift như một thuộc tính (ví dụ UIBarItem
) và không ai trong số các cấu trúc sau biên dịch
func handleEvent(sender: AnyObject) {
// Error: AnyObject does not have a member named "enabled"
sender.enabled? = false
// Error: (BooleanLiteralCompatible) -> _ is not identical to Bool
sender.setEnabled?(false)
}
Nếu có thể, hãy thực hiện chức năng này bằng cách sử dụng giao thức. Sau đó bạn có thể thay đổi kiểm tra 'respondsToSelector' bằng một' if-let' như 'if let toggable = sender as? Toggable' (giả định một 'giao thức Toggable' với thuộc tính' enabled'). – dcestari
Không chắc chắn, nhưng có lẽ AnyObject? – kostek
http://roadfiresoftware.com/2014/07/swifts-var-is-not-objective-cs-id/ –