@IBAction func helloClick(sender: AnyObject) {
sender.setTitle("Click", forState: UIControlState.Normal)
}
उपरोक्त कोड ठीक काम करता है। लेकिन setTitle
AnyObject
पर कोई विधि नहीं है? यह संकलन समय त्रुटि नहीं होनी चाहिए?स्विफ्ट ने मुझे AnyObject पर setTitle क्यों कॉल करने दिया?
कंपाइलर जानता है कि उदाहरण के लिए 'setTitle2' मौजूद नहीं है और यह इसे संकलित नहीं करेगा। तो यह मुझे असुरक्षित कोड लिखने नहीं देगा। –
बेशक यह आपको असुरक्षित कोड लिखने देगा। यह आपको '(NSArray() को AnyObject के रूप में लिखने देगा) .setTitle (" foo ", forState: Normal) 'जो लगभग निश्चित रूप से क्रैश होगा। इसी प्रकार, अपना उदाहरण कोड दिया गया है, यह आपको 'हैलोक्लिक (एनएसएआरएआरए())' कहने देगा, जिसका एक समान प्रभाव होगा। जब भी आप AnyObject का उपयोग करते हैं तो यह असुरक्षित होता है, जब तक कि आप हमेशा बीमा न करें कि आपका प्रस्तावित ऑपरेशन सुरक्षित है। आम तौर पर इसे उचित रूप से कुछ और विशिष्ट टाइप करने के द्वारा। –
@IanWarburton: आप किसी भी विधि का नाम कह सकते हैं जहां संकलक को दिखाई देने वाले नाम के साथ '@ objc' विधि घोषणा थी। आपने विधि नाम 'setTitle:' विधि के साथ एक एपीआई आयात किया है, लेकिन इसने कभी भी किसी विधि को 'setTitle2:' विधि के साथ नहीं देखा है। यदि आपने '@ objc' विधि के साथ एक वर्ग घोषित किया है जिसका नाम 'setTitle2:' है, तो हाँ, यह संकलित करेगा। – newacct