আমি আরও স্পষ্টভাবে সুইফটের 'ক্লোজার' বোঝার চেষ্টা করছি।
কিন্তু @escapingএবং Completion Handlerবুঝতে খুব কঠিন
আমি অনেক সুইফ্ট পোস্টিং এবং অফিসিয়াল ডকুমেন্ট অনুসন্ধান করেছি, কিন্তু আমি অনুভব করেছি যে এটি এখনও পর্যাপ্ত নয়।
এটি সরকারী নথির কোড উদাহরণ
var completionHandlers: [()->Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping ()->Void){
completionHandlers.append(completionHandler)
}
func someFunctionWithNoneescapingClosure(closure: ()->Void){
closure()
}
class SomeClass{
var x:Int = 10
func doSomething(){
someFunctionWithEscapingClosure {
self.x = 100
//not excute yet
}
someFunctionWithNoneescapingClosure {
x = 200
}
}
}
let instance = SomeClass()
instance.doSomething()
print(instance.x)
completionHandlers.first?()
print(instance.x)
আমি শুনেছি যে দুটি উপায় এবং কারণ ব্যবহার করা হচ্ছে @escaping
প্রথমটি কোনও ক্লোজার সংরক্ষণের জন্য, দ্বিতীয়টি অ্যাসিঙ্ক অপারেটিং উদ্দেশ্যে।
নীচে আমার প্রশ্নগুলি হল :
প্রথমত, doSomething, executes তারপর someFunctionWithEscapingClosureঅবসান পরামিতি সঙ্গে নির্বাহ করবে এবং যে অবসান বিশ্বব্যাপী পরিবর্তনশীল অ্যারের মধ্যে সংরক্ষণ করা হবে।
আমি মনে করি বন্ধটি {self.x = 100 is
কীভাবে self{স্ব.এক্স = 100} যা বিশ্বব্যাপী ভেরিয়েবলে সংরক্ষণ completionHandlersকরা যায় instanceসেই বস্তুর সাথে সংযুক্ত হতে পারে SomeClass?
দ্বিতীয়ত, আমি someFunctionWithEscapingClosureএই মত বুঝতে ।
স্থানীয় ভেরিয়েবল ক্লোজারকে completionHandlerگلوبل ভেরিয়েবল 'কমপ্লিউশনহ্যান্ডার্স we using@ এস্কেটিং` কীওয়ার্ডে সঞ্চয় করতে!
@escapingকীওয়ার্ড someFunctionWithEscapingClosureরিটার্ন ব্যতীত স্থানীয় ভেরিয়েবল completionHandlerমেমরি থেকে সরিয়ে ফেলবে
@escaping স্মৃতিতে যে বন্ধ রাখা হয়
এটা কী ঠিক?
শেষ অবধি, আমি এই ব্যাকরণের অস্তিত্ব সম্পর্কে আশ্চর্য হয়েছি।
হতে পারে এটি খুব প্রাথমিক প্রশ্ন।
আমরা যদি কিছু নির্দিষ্ট ফাংশন পরে কিছু ফাংশন সম্পাদন করতে চাই। আমরা নির্দিষ্ট ফাংশন কল করার পরে কেন কিছু ফাংশন কল করি না?
উপরের প্যাটার্নটি ব্যবহার করে এবং একটি পালানো কলব্যাক ফাংশন ব্যবহারের মধ্যে পার্থক্যগুলি কী?
