मुझे आश्चर्य है कि 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];
}
}];
}
सबसे बड़ी समस्या यह है कि setEnabled:
(जैसे 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)
}
यदि संभव हो, प्रोटोकॉल का उपयोग करके इस कार्यक्षमता को लागू करें। फिर आप 'ifs let' चयनकर्ता को 'if-let'' के साथ बदल सकते हैं, जैसे कि अगर toggable = प्रेषक के रूप में? Toggable' ('सक्षम' प्रॉपर्टी के साथ 'प्रोटोकॉल Toggable' मानते हुए)। – dcestari
यकीन नहीं है, लेकिन शायद AnyObject? – kostek
http://roadfiresoftware.com/2014/07/swifts-var-is-not-objective-cs-id/ –