দ্রুত: ব্লক ঘোষণার মতো বন্ধ ঘোষণা


90

আমরা অবজেক্টিভ-সি তে নীচে হিসাবে ব্লক ঘোষণা করতে পারি।

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

আমি এটি দ্রুত করার চেষ্টা করছি, এটি ত্রুটি দেয়।

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

ত্রুটি: অঘোষিত 'সমাপ্তি ফাংশন' ব্যবহার

সংজ্ঞা:

var completion: CompletionBlock = { }

এই কিভাবে করবেন?

হালনাগাদ:

@ জেটব্যান্ডেসের উত্তর অনুসারে আমি একাধিক যুক্তি দিয়ে ক্লোজার তৈরি করতে পারি

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

4
@ডাউনভোটারস: দয়া করে এই প্রশ্নটির মধ্যে কী ভুল তা ব্যাখ্যা করুন?
মানি

4
অনেক লোক মনে করেন আমাদের প্রথমে দ্রুত ভাষা শিখতে হবে এবং তারপরে লিখতে হবে। বোকা অনুভূতি ...
জনক নির্মল

@ মণি হাই, আপনি কীভাবে এই জাতীয় উপাধিটি কোনও var(যেমন var completion: CompletionBlock = {....}একাধিক যুক্তি ব্যবহার করার জন্য ব্যবহার করবেন?) ধন্যবাদ জানাতে চাইবেন ?
আনহেলিগ

উত্তর:


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+ এর মতো প্রয়োজনীয়।


যদি এটি দুটিরও বেশি যুক্তি লাগে তবে আমরা কীভাবে এটি করতে পারি? আপনি কি দয়া করে আমাকে সেই বইতে বা অন্য কোনও রেফারেন্সে পরিচালিত করবেন?
মানি

সুইফ্টের জন্য সেরা বই: অ্যাপল ইনক। "দ্য সুইফ্ট প্রোগ্রামিং ভাষা।" আইবুকস itun.es/ca/jEUH0.l
ডেভিড Skrundz

@ এনএসআরএ আমি জানি যে একটি মাত্র বই দ্রুতগতির জন্য উপলব্ধ। তবে আমি বিষয়টির সাথে সম্পর্কিত অনুচ্ছেদটি সম্পর্কে জিজ্ঞাসা করছি ... :)
মণি

4
এটি কাজ করছে আমি দুটি যুক্তি দিয়ে তৈরি করেছিtypealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()
মণি

@zumzum এটা প্যারামিটার নাম "আলাদা reason" পদ্ধতি শরীর থেকে " println(reason)"
jtbandes

13

দ্রুত সুইজার বন্ধ সম্পর্কে দুর্দান্ত ব্লগ এখানে

এখানে কিছু উদাহরন:

পরিবর্তনশীল হিসাবে:

var closureName: (inputTypes) -> (outputType)

Alচ্ছিক পরিবর্তনশীল হিসাবে:

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

একটি প্রকারের নাম হিসাবে:

typealias closureType = (inputTypes) -> (outputType)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.