2014-09-29 7 views
14

में deinit कॉल करने के लिए मैं निम्नलिखित के रूप में एक कोड ब्लॉक लिखा था। जब व्यक्ति को nil पर सेट करें, deinit विधि को कॉल नहीं किया जाता है।कैसे स्विफ्ट

+0

उन अंतिम 3 लाइनों का वास्तविक संदर्भ क्या है? वे वास्तविक जीवन में इस तरह ढीले नहीं बैठ सकते हैं ... – matt

+0

ठीक है, तो यह समस्या है। – matt

+0

यदि आप इसे खेल के मैदान में आजमा रहे हैं, तो मुझे लगता है कि यही कारण है कि यह काम नहीं कर रहा है। मैंने अभी स्विफ्ट बुक से 'बैंक' उदाहरण लागू किया है और एक खेल के मैदान में 'डीनिट' विधि नहीं कहा जाता है, लेकिन अगर मैं कोड को एप्लिकेशन में डालता हूं और इसे चलाता हूं, तो यह है। – Paulw11

उत्तर

16

समस्या यह है कि एक खेल का मैदान वास्तविक जीवन नहीं है। यह उनका उपयोग करने के लिए सिर्फ एक और कारण नहीं है (मुझे लगता है कि वे ऐप्पल के हिस्से पर एक भयानक गलती हैं)। वास्तविक आईओएस ऐप प्रोजेक्ट का उपयोग करें और deinit को उम्मीद के रूप में बुलाया जाएगा। एक वास्तविक परियोजना से

उदाहरण:

class ViewController: UIViewController { 
    class Person{ 
     let name:String; 
     init(name:String){ 
      self.name = name; 
      println("\(name) is being initialized."); 
     } 
     deinit{ 
      println("\(name) is being deInitialized."); 

     } 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     var person:Person?; 
     person = Person(name:"leo"); 
     person = nil; 
    } 
} 

है कि आप उसे क्या करने की आशा।

+0

क्या आप अभी भी "सोचते हैं कि वे ऐप्पल के हिस्से पर एक भयानक गलती हैं" – PaulWoodIII

+1

@PaulWoodIII नहीं, अब मुझे लगता है कि वे शैतान – matt

+1

अर्धविराम (;) का काम हैं, क्या वास्तव में इसकी आवश्यकता है? – turtle