parameters - আপন - সুইফ্টে কিভাবে জিসিডি প্রধান থ্রেডের পরামিতিগুলির সাথে পদ্ধতি কল করবেন?



আপনার ফোন দিয়েই দেখুন আপনার প্রেমিকা কখন কার নাম্বারে কথা বলছে (6)

অন্যান্য উত্তর হিসাবে একই ফলাফল অর্জন করতে এখানে নিসার (আইএমও) সুইফ্টি / কোকো স্টাইল সিনট্যাক্স রয়েছে:

NSOperationQueue.mainQueue().addOperationWithBlock({
    // Your code here
})

অথবা আপনি এমনকি কম কোড এবং আরো কার্যকারিতা জন্য জনপ্রিয় Async সুইফ্ট লাইব্রেরি দখল করতে পারে:

Async.main {
    // Your code here
}

https://src-bin.com

আমার অ্যাপে আমার একটি ফাংশন রয়েছে যা একটি NSRURL সেশন তৈরি করে এবং একটি NSURLRequest ব্যবহার করে পাঠায়

sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error)

এই কাজটির সমাপ্তি ব্লকটিতে, আমাকে কিছু সংখ্যক গণনা করতে হবে যা কলিং ভিউ কন্ট্রোলারকে একটি UIImage যোগ করে। আমি একটি func বলা আছে

func displayQRCode(receiveAddr, withAmountInBTC:amountBTC)

যে UIImage- যোগ গণনা করে। যদি আমি সমাপ্তি ব্লকের ভেতর ভিউ-এডিং কোড চালানোর চেষ্টা করি, এক্সকোডটি একটি ত্রুটি বলে যে আমি ব্যাকগ্রাউন্ড প্রক্রিয়ার সময় লেআউট ইঞ্জিন ব্যবহার করতে পারি না। সুতরাং আমি SO তে কিছু কোড খুঁজে পেয়েছি যা মূল থ্রেডে একটি পদ্ধতিতে সারিবদ্ধ করার চেষ্টা করে:

let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.0 * Double(NSEC_PER_MSEC)))
                    dispatch_after(time, dispatch_get_main_queue(), {
                        let returned = UIApplication.sharedApplication().sendAction("displayQRCode:", to: self.delegate, from: self, forEvent: nil)
                        })

যাইহোক, আমি এই ফাংশন কলটিতে "receiveAddr" এবং "amountBTC" পরামিতিগুলি কীভাবে যোগ করব তা জানি না। আমি কিভাবে এটি করব, অথবা কেউ কি অ্যাপ্লিকেশনের প্রধান সারিতে একটি পদ্ধতি কল যোগ করার জন্য সর্বোত্তম উপায় প্রস্তাব করতে পারে?


Answer #1

আপনি বন্ধ স্ব স্ব ভিতরে ব্যবহার করা হয়, তাহলে আত্ম দুর্বল করতে ভুলবেন না।

dispatch_async(dispatch_get_main_queue(),{ [weak self] () -> () in
            if let strongSelf = self {
                self?.doSomething()
            }
        })

Answer #2

এটি করার সঠিক উপায় হল main_queue এ dispatch_async ব্যবহার করা, যেমন আমি নিম্নলিখিত কোডটি করেছি

dispatch_async(dispatch_get_main_queue(), {
                        (self.delegate as TBGQRCodeViewController).displayQRCode(receiveAddr, withAmountInBTC:amountBTC)
                        })

Answer #3

পুনঃলোড সংগ্রহ মূল থ্রেড দেখুন

 DispatchQueue.main.async {
      self.collectionView.reloadData()
 }

Answer #4

সুইফ্ট 3 এবং সুইফ্ট 4 সংস্করণ:

DispatchQueue.main.async {
    print("Hello")
}

সুইফ্ট 3 এবং এক্সকোড 9 .২:

dispatch_async_on_main_queue {
     //Your code
     print("Hello")
 }

Answer #5

সুইফ্ট 2

পিছনে বন্ধ closures ব্যবহার করে:

dispatch_async(dispatch_get_main_queue()) {
    self.tableView.reloadData()
}

পিছনে ক্লোজারগুলি সুইফ্ট সিনট্যাক্টিক চিনি যা ফাংশন প্যারামিটার সুযোগের বাইরে বন্ধের সংজ্ঞা দেয়। আরও তথ্যের জন্য সুইফ্ট 2.2 প্রোগ্রামিং ভাষা গাইডের পিছনে ক্লোজারগুলি দেখুন।

Dispatch_async ক্ষেত্রে API হল func dispatch_async(queue: dispatch_queue_t, _ block: dispatch_block_t) যেহেতু dispatch_block_t জন্য টাইপ উপনাম আছে () -> Void - 0 প্যারামিটারগুলি গ্রহণ করে এবং কোনও ফেরত মান না থাকে এবং শেষ প্যারামিটার হিসাবে ব্লক থাকে ফাংশন আমরা dispatch_async বাইরের সুযোগ মধ্যে বন্ধ সংজ্ঞায়িত করতে পারেন।