स्विफ्ट: ब्लॉक घोषणा की तरह क्लोजर घोषणा


90

हम ऑब्जेक्टिव-सी में नीचे ब्लॉक घोषित कर सकते हैं।

typedef void (^CompletionBlock) (NSString* completionReason);

मैं तेजी से ऐसा करने की कोशिश कर रहा हूं, यह त्रुटि देता है।

func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction

त्रुटि: अघोषित 'पूर्णकरण' का उपयोग

परिभाषा:

var completion: CompletionBlock = { }

यह कैसे करना है?

अपडेट करें:

@ Jtbandes के जवाब के अनुसार, मैं कई तर्कों के साथ क्लोजर बना सकता हूं

typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()

1
@Downvotters: कृपया समझाएं कि इस प्रश्न में क्या गलत है?
मणि

1
ऐसे कई लोग हैं जिन्हें लगता है कि हमें पहले स्विफ्ट भाषा सीखनी चाहिए और फिर लिखना चाहिए। मूढ़ भाव ...
जनक निर्मल

@ मानी हाय, क्या आप यह भी दर्शाएंगे कि आप किस तरह से एक और var(यानी, var completion: CompletionBlock = {....}कई तर्क का उपयोग करते हुए) उपनाम टाइप करेंगे ? धन्यवाद।
Unheilig

जवाबों:


141

समारोह प्रकार के लिए वाक्य रचना है (in) -> out

typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }

ध्यान दें कि इनपुट प्रकार के आसपास कोष्ठक केवल स्विफ्ट 3+ के रूप में आवश्यक हैं।


यदि यह दो से अधिक तर्क देता है, तो हम ऐसा कैसे कर सकते हैं? क्या आप कृपया मुझे उस पुस्तक या किसी भी संदर्भ के लिए निर्देशित करेंगे?
मणि

स्विफ्ट के लिए सर्वश्रेष्ठ पुस्तक: Apple इंक "द स्विफ्ट प्रोग्रामिंग लैंग्वेज।" iBooks। itun.es/ca/jEUH0.l
डेविड स्कर्न्डज़

@NSArray मुझे पता है कि स्विफ्ट के लिए केवल एक पुस्तक उपलब्ध है। लेकिन मैं विषय के साथ उस संबंधित अध्याय के बारे में पूछ रहा हूँ ... :)
मणि

4
@jtbandes यह काम कर रहा है। मैंने दो तर्कों के साथ बनाया हैtypealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
मणि

@ ज़ुमज़म यह पैरामीटर नाम " reason" मेथड बॉडी "से अलग करता है println(reason)"
jtbandes

13

यहाँ तेजी से बंद होने के बारे में भयानक ब्लॉग है।

यहाँ कुछ उदाहरण हैं:

एक चर के रूप में:

var closureName: (inputTypes) -> (outputType)

एक वैकल्पिक चर के रूप में:

var closureName: ((inputTypes) -> (outputType))?

एक प्रकार के उपनाम के रूप में:

typealias closureType = (inputTypes) -> (outputType)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.