खोज…


परिचय

स्विफ्ट डॉक्यूमेंटेशन से

एक क्लोजर एक फ़ंक्शन से बचने के लिए कहा जाता है जब क्लोजर फ़ंक्शन के तर्क के रूप में पारित किया जाता है, लेकिन फ़ंक्शन के वापस आने के बाद कहा जाता है। जब आप एक फ़ंक्शन को घोषित करते हैं जो अपने मापदंडों में से एक के रूप में एक क्लोजर लेता है, तो आप पैरामीयर के प्रकार से पहले @ एसेडिंग लिख सकते हैं कि यह इंगित करने के लिए कि क्लोजर को भागने की अनुमति है।

गैर-भागने वाला बंद

स्विफ्ट 1 और 2 में, क्लोजर पैरामीटर डिफ़ॉल्ट रूप से बच रहे थे। यदि आप जानते हैं कि आपका बंद होने से फ़ंक्शन बॉडी से बच नहीं जाएगा, तो आप @noescape विशेषता के साथ पैरामीटर को चिह्नित कर सकते हैं।

स्विफ्ट 3 में, यह दूसरा तरीका है: डिफ़ॉल्ट रूप से क्लोजर पैरामीटर गैर-भागने वाले हैं। यदि आप फ़ंक्शन से बचने के लिए इसका इरादा रखते हैं, तो आपको इसे @ एसेसिंग विशेषता के साथ चिह्नित करना होगा।

class ClassOne {
  // @noescape is applied here as default
  func methodOne(completion: () -> Void) {
    // 
  }
}

class ClassTwo {
  let obj = ClassOne()
  var greeting = "Hello, World!"

  func methodTwo() {
    obj.methodOne() {
      // self.greeting is required
      print(greeting)
    }
  }
}

भागने से बचे

स्विफ्ट डॉक्यूमेंटेशन से

@escaping

इस विशेषता को एक विधि या फ़ंक्शन घोषणा में एक पैरामीटर के प्रकार पर लागू करें यह इंगित करने के लिए कि पैरामीटर्स का मूल्य बाद के निष्पादन के लिए संग्रहीत किया जा सकता है। इसका मतलब है कि मूल्य को कॉल के जीवनकाल को रेखांकित करने की अनुमति है। बचने के प्रकार विशेषता के साथ फ़ंक्शन प्रकार पैरामीटर को स्वयं के स्पष्ट उपयोग की आवश्यकता होती है। गुणों या विधियों के लिए।

class ClassThree {

    var closure: (() -> ())?

    func doSomething(completion: @escaping () -> ()) {
        closure = finishBlock
    }
}

उपरोक्त उदाहरण में समापन ब्लॉक को बंद करने के लिए सहेजा गया है और यह वास्तव में फ़ंक्शन कॉल से परे रहेगा। इसलिए कंप्लीशन @ ब्लॉकिंग के रूप में पूर्ण ब्लॉक को चिह्नित करने के लिए बाध्य करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow