Ich frage mich, was das Swift-Äquivalent beim Aufruf einer Methode auf id
ist, in der die Verfügbarkeit der Methode zur Laufzeit festgestellt wird. Insbesondere freue ich dieses Muster in Swift zu tun:Was ist das schnelle Äquivalent zum Festlegen von Eigenschaften für 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];
}
}];
}
Das größte Problem ist, dass setEnabled:
in Swift als Eigenschaft importiert wird (zB UIBarItem
) und keines der folgenden Konstrukte kompilieren
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)
}
Wenn möglich, implementieren Sie diese Funktionalität über Protokolle. Sie könnten dann den 'ansagesToSelector' Check mit einem' if-let' ändern, wie 'if toggles = sender as as? Umschaltbar (unter der Annahme, dass das Protokoll mit der Eigenschaft 'enabled' umschaltbar ist). – dcestari
Nicht sicher, aber vielleicht AnyObject? – kostek
http://roadfiresoftware.com/2014/07/swifts-var-is-not-objective-cs-id/ –