Swift 3 warning for dispatch async

前端 未结 4 454
灰色年华
灰色年华 2021-02-03 19:57

I have this code:

DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default).async {
                let url = URL(string: itemImageURL )
                 


        
相关标签:
4条回答
  • 2021-02-03 20:44

    If you're creating a property using the Dispatch Framework and updating the UI with some animation within a function it might look something like this.

    let queue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default)
        // dispatch_after says that it will send this animation every nsec
        queue.asyncAfter(deadline: when) {
            DispatchQueue.main.async(execute: {
                self.animate(withDuration: 0.5, animations: {
                    self.image.setWidth(35)
                    self.image.setHeight(35)
                })
            })
        }
    
    0 讨论(0)
  • 2021-02-03 20:46

    Below code is tested for Swift 3.0 on Xcode 8.2.1

    DispatchQueue.global(qos: .background).async {
                let img2 = Downloader.downloadImageWithURL(imageURLs[1])
    
                // Background Thread
                DispatchQueue.main.async {
    
                    // Run UI Updates
                    self.imageView2.image = img2
                }
            }
    

    where property of QoS are :

    background, utility, `default`, userInitiated, userInteractive and unspecified
    

    Refer this apple document for more details.

    0 讨论(0)
  • 2021-02-03 20:57

    try qos: DispatchQoS.QoSClass.default instead of priority: DispatchQueue.GlobalQueuePriority.default

    DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
                let url = URL(string: itemImageURL )
                let data = try? Data(contentsOf: url!)
                if data != nil {
                    DispatchQueue.main.async{
                        cell.advImage!.image = UIImage(data: data!)
                    }
                }
            }
    
    0 讨论(0)
  • 2021-02-03 20:58

    Instead of using priority parameter:

    DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.default).async {
     // ...
    }
    

    use qos parameter that uses a different enum DispatchQoS.QoSClass.default but you can also use its enum value as just .default:

    DispatchQueue.global(qos: .default).async {
     // ...
    }
    

    Swift 3 has brought many changes on GCD(Grand Central Dispatch).

    0 讨论(0)
提交回复
热议问题