ios - स्विफ्ट 3 में प्रेषण कतार कैसे बनाएं




swift3 xcode8 (10)

XCode 8, स्विफ्ट 3 https://github.com/rpthomas/Jedisware में संकलित

 @IBAction func tap(_ sender: AnyObject) {

    let thisEmail = "emailaddress.com"
    let thisPassword = "myPassword" 

    DispatchQueue.global(qos: .background).async {

        // Validate user input

        let result = self.validate(thisEmail, password: thisPassword)

        // Go back to the main thread to update the UI
        DispatchQueue.main.async {
            if !result
            {
                self.displayFailureAlert()
            }

        }
    }

}

स्विफ्ट 2 में, मैं निम्नलिखित कोड के साथ कतार बनाने में सक्षम था:

let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT)

लेकिन यह स्विफ्ट 3 में संकलित नहीं है।

स्विफ्ट 3 में इसे लिखने का पसंदीदा तरीका क्या है?


आप इस कोड का उपयोग स्विफ्ट 3.0 में प्रेषण कतार बना सकते हैं

DispatchQueue.main.async
 {
   /*Write your code here*/
 }

   /* or */

let delayTime = DispatchTime.now() + Double(Int64(0.5 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)                   
DispatchQueue.main.asyncAfter(deadline: delayTime)
{
  /*Write your code here*/
}

मैंने यह किया है और यह विशेष रूप से महत्वपूर्ण है यदि आप यूआईटेबल व्यू या यूआईपीविकर्वर जैसे उपयोगकर्ता को सूचित किए बिना नया डेटा दिखाने के लिए अपने यूआई को रिफ्रेश करना चाहते हैं।

    DispatchQueue.main.async
 {
   /*Write your thread code here*/
 }

यह अब बस है:

let serialQueue = DispatchQueue(label: "my serial queue")

डिफ़ॉल्ट धारावाहिक है, समवर्ती प्राप्त करने के लिए, आप वैकल्पिक विशेषताओं तर्क का उपयोग करते हैं


स्विफ्ट 3

आप स्विफ्ट कोड में कुछ क्लोजर कॉल करना चाहते हैं तो आप स्टोरीबोर्ड में बदलना चाहते हैं। किसी भी प्रकार के परिवर्तन को देखने के लिए आपका एप्लिकेशन क्रैश हो जाएगा

लेकिन आप डिस्पैच विधि का उपयोग करना चाहते हैं, आपका एप्लिकेशन क्रैश नहीं होगा

async विधि

DispatchQueue.main.async 
{
 //Write code here                                   

}

सिंक विधि

DispatchQueue.main.sync 
{
     //Write code here                                  

}

स्विफ्ट 3 के लिए

   DispatchQueue.main.async {
        // Write your code here
    }

स्विफ्ट 3 के तहत संकलन। इस उदाहरण में अधिकांश सिंटैक्स शामिल हैं जिनकी हमें आवश्यकता है।

QoS - सेवा सिंटैक्स की नई गुणवत्ता

weak self - चक्र को बनाए रखने के लिए बाधित करना

यदि स्वयं उपलब्ध नहीं है, तो कुछ भी न करें

async global background queue - नेटवर्क क्वेरी के लिए

async main queue - UI को छूने के लिए।

बेशक, आपको इसमें कुछ त्रुटि जाँच करने की आवश्यकता है ...

DispatchQueue.global(qos: .utility).async { [weak self] () -> Void in

    guard let strongSelf = self else { return }

    strongSelf.flickrPhoto.loadLargeImage { loadedFlickrPhoto, error in

        if error != nil {
            print("error:\(error)")
        } else {
            DispatchQueue.main.async { () -> Void in
                activityIndicator.removeFromSuperview()
                strongSelf.imageView.image = strongSelf.flickrPhoto.largeImage
            }
        }
    }
}

   let concurrentQueue = dispatch_queue_create("com.swift3.imageQueue", DISPATCH_QUEUE_CONCURRENT) //Swift 2 version

   let concurrentQueue = DispatchQueue(label:"com.swift3.imageQueue", attributes: .concurrent) //Swift 3 version

मैंने आपका कोड Xcode 8, स्विफ्ट 3 में फिर से काम किया और आपके स्विफ्ट 2 संस्करण के विपरीत परिवर्तन चिह्नित किए गए हैं।


 DispatchQueue.main.async {
          self.collectionView?.reloadData() // Depends if you were populating a collection view or table view
    }


OperationQueue.main.addOperation {
    self.lblGenre.text = self.movGenre
}

// यदि आप अपने व्यू-कंट्रौलर पर ऑब्जेक्ट्स (लेबल, इमेजव्यू, टेक्स्टव्यू) को पॉप्युलेट करने के लिए ऑपरेशन क्व्यू का उपयोग करते हैं


DispatchQueue.main.async(execute: {

// write code

})

सीरियल कतार:

let serial = DispatchQueue(label: "Queuename")

serial.sync { 

 //Code Here

}

समवर्ती कतार:

 let concurrent = DispatchQueue(label: "Queuename", attributes: .concurrent)

concurrent.sync {

 //Code Here
}





dispatch-after