2016-10-06 3 views
20

Ich habe eine Funktion, die so geht:Führen Sie einen Hintergrund-Thread auf Swift 3

fileprivate func setupImageViewWithURL(url: URL) { 
    var image: UIImage? = nil 
    do { 
     try image = UIImage(data: Data(contentsOf: url))! 
    } catch is NSError { 
     print("Failed") 
    } 

    image = self.imageWithImage(sourceImage: image!, scaledToWidth: UIScreen.main.bounds.size.width) 
    self.imageImageView.image = image 
    self.imageImageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: (image?.size.height)!) 
} 

ich möchte es laufen auf einem Backgroundthread.

Ich habe die Methoden von Swift2 versucht, aber es hat nicht funktioniert.

Hat sich am Thema Thread in Swift3 etwas geändert?

Vielen Dank!

+1

http://swiftable.io/2016/06/dispatch-queues-swift-3/ –

+0

@ New16 Ich habe es bereits ausprobiert, es entspricht nicht einmal –

+3

Mögliche Duplikate von [Wie versende ich Dispatch_sync, dispatch_async, dispatch_after usw. in Swift 3?] (Http://stackoverflow.com/questions/37801370/ how-do-i-dispatch-sync-dispat-async-dispatch-nach-etc-in-swift-3). –

Antwort

51

Es ist OK, ein Bild im Hintergrund zu laden, aber es ist nicht OK, UI-Aktualisierungen im Hintergrund-Thread durchzuführen. Deshalb muss die Funktion zwei Threads enthalten.

func setupImageViewWithURL(url: URL) { 
    var image: UIImage? = nil 

    DispatchQueue.global().async { 
     do { 
      try image = UIImage(data: Data(contentsOf: url))! 
     } catch { 
      print("Failed") 
     } 
     DispatchQueue.main.async(execute: { 
      if image != nil { 
       image = self.imageWithImage(sourceImage: image!, scaledToWidth: UIScreen.main.bounds.size.width) 
       self.imageImageView.image = image 
       self.imageImageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: (image?.size.height)!) 
      } 
     }) 
    } 
} 
+0

'ImageWithImage' ist eine Methode, die das Bild schneidet, kann es auf einem Hintergrund-Thread getan werden? –

+0

@ FS.O6, ich denke nicht, dass es ein Problem sein sollte. Du kannst es testen. –

+0

Ok, großartig. Vielen Dank! –

0

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

}

Verwandte Themen