উত্তর:
বলুন নেটওয়ার্ক থেকে কোনও ফাইল ডাউনলোড করার জন্য আপনার কাছে ডাউনলোড ফাংশন রয়েছে এবং ডাউনলোডের কাজ শেষ হয়ে গেলে আপনাকে বিজ্ঞপ্তি দিতে চান।
typealias CompletionHandler = (success:Bool) -> Void
func downloadFileFromURL(url: NSURL,completionHandler: CompletionHandler) {
// download code.
let flag = true // true if download succeed,false otherwise
completionHandler(success: flag)
}
// How to use it.
downloadFileFromURL(NSURL(string: "url_str")!, { (success) -> Void in
// When download completes,control flow goes here.
if success {
// download success
} else {
// download fail
}
})
আশা করি এটা সাহায্য করবে.
উত্তরগুলি বুঝতে আমার সমস্যা হয়েছিল তাই আমি ধরে নিচ্ছি যে আমার মতো অন্য কোনও শিক্ষানবিশও আমার মতো একই সমস্যা হতে পারে।
আমার সমাধান শীর্ষের উত্তরের মতোই করে তবে আশা করি প্রাথমিকভাবে বা সাধারণভাবে বুঝতে সমস্যা হওয়া লোকদের জন্য কিছুটা আরও স্পষ্ট এবং বুঝতে সহজ।
একটি সম্পূর্ণতা হ্যান্ডলার সহ একটি ফাংশন তৈরি করতে
func yourFunctionName(finished: () -> Void) {
print("Doing something!")
finished()
}
ফাংশন ব্যবহার করতে
override func viewDidLoad() {
yourFunctionName {
//do something here after running your function
print("Tada!!!!")
}
}
আপনার আউটপুট হবে
কিছু করা
Tada !!!
আশাকরি এটা সাহায্য করবে!
সরল সুইফ্ট ৪.০ উদাহরণ:
func method(arg: Bool, completion: (Bool) -> ()) {
print("First line of code executed")
// do stuff here to determine what you want to "send back".
// we are just sending the Boolean value that was sent in "back"
completion(arg)
}
এটি কিভাবে ব্যবহার করতে:
method(arg: true, completion: { (success) -> Void in
print("Second line of code executed")
if success { // this will be equal to whatever value is set in this method call
print("true")
} else {
print("false")
}
})
আমরা এই উদ্দেশ্যে ক্লোজারগুলি ব্যবহার করতে পারি । নিম্নলিখিত চেষ্টা করুন
func loadHealthCareList(completionClosure: (indexes: NSMutableArray)-> ()) {
//some code here
completionClosure(indexes: list)
}
কিছু সময় আমরা নীচে দেওয়া হিসাবে এই ফাংশন কল করতে পারেন।
healthIndexManager.loadHealthCareList { (indexes) -> () in
print(indexes)
}
বন্ধ সম্পর্কিত আরও তথ্যের জন্য দয়া করে নীচের লিঙ্কটি দেখুন ।
সুইফ্ট 5.0 +, সাধারণ এবং শর্ট
উদাহরণ:
স্টাইল 1
func methodName(completionBlock: () -> Void) {
print("block_Completion")
completionBlock()
}
স্টাইল 2
func methodName(completionBlock: () -> ()) {
print("block_Completion")
completionBlock()
}
ব্যবহার করুন:
override func viewDidLoad() {
super.viewDidLoad()
methodName {
print("Doing something after Block_Completion!!")
}
}
আউটপুট
block_Completion
ব্লক_কম্পিশনের পরে কিছু করছে !!
আমি কাস্টম মেড কমপ্লিট হ্যান্ডলারগুলি সম্পর্কে কিছুটা বিভ্রান্ত। আপনার উদাহরণে:
বলুন নেটওয়ার্ক থেকে কোনও ফাইল ডাউনলোড করার জন্য আপনার কাছে ডাউনলোড ফাংশন রয়েছে এবং ডাউনলোডের কাজ শেষ হয়ে গেলে আপনাকে বিজ্ঞপ্তি দিতে চান।
typealias CompletionHandler = (success:Bool) -> Void
func downloadFileFromURL(url: NSURL,completionHandler: CompletionHandler) {
// download code.
let flag = true // true if download succeed,false otherwise
completionHandler(success: flag)
}
আপনার // download code
ইচ্ছামত এখনও অবিচ্ছিন্নভাবে চালানো হবে। কেন কোড আপনার সরাসরি যেতে হবে না let flag = true
এবং completion Handler(success: flag)
সমাপ্ত করা আপনার ডাউনলোড কোডের জন্য অপেক্ষা না করেই?