Интересно, что эквивалент Swift при вызове метода на id
, в котором определяется доступность метода во время выполнения. В частности, я хочу сделать этот шаблон в Swift:
-(IBAction) handleEvent:(id) sender {
BOOL didDisable = NO;
if([sender respondsToSelector:@selector(setEnabled:)]) {
[sender setEnabled:NO];
didDisable = YES;
}
[self doSomethingAsyncWithCompletionHandler:^{
if(didDisable) {
[sender setEnabled:YES];
}
}];
}
Самая большая проблема заключается в том, что setEnabled:
импортируется в Swift как свойство (например, UIBarItem
), и ни одна из следующих конструкций не компилирует
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)
}