未在iOS Swift上显示下载图像

未在iOS Swift上显示下载图像,ios,swift,image,request,nsurl,Ios,Swift,Image,Request,Nsurl,我正在尝试下载图像并根据不同的条件显示它们。如果我只是简单地在主线程中下载图像,那么代码是有效的,但是我现在正试图通过后端下载它们 我的控制台是干净的,所以我没有收到任何错误-但我的图像没有显示?这是我第一次尝试做后端图像下载,也做了swift,因为我来自objective-c 有人能看看下面的代码,让我知道问题是什么吗 //FizzBuzz Image Download weak var fizzBuzzImage: UIImage! let fizzBuzzString = "https:/

我正在尝试下载图像并根据不同的条件显示它们。如果我只是简单地在主线程中下载图像,那么代码是有效的,但是我现在正试图通过后端下载它们

我的控制台是干净的,所以我没有收到任何错误-但我的图像没有显示?这是我第一次尝试做后端图像下载,也做了swift,因为我来自objective-c

有人能看看下面的代码,让我知道问题是什么吗

//FizzBuzz Image Download
weak var fizzBuzzImage: UIImage!
let fizzBuzzString = "https://emkaydeum.files.wordpress.com/2015/08/fizzbuzz.png"
var fizzBuzzURL:NSURL!

//Fizz Image Download
weak var fizzImage: UIImage!
let fizzString = "https://vignette2.wikia.nocookie.net/leagueoflegends/images/b/b0/Fizz_Render.png/revision/latest?cb=20151205185848"
var fizzURL:NSURL!

//Buzz Image Download
weak var buzzImage: UIImage!
let buzzString = "https://vignette2.wikia.nocookie.net/disney/images/b/bc/Buzz_Disney_INFINITY_Render.png/revision/latest?cb=20140605182818"
var buzzURL:NSURL!

override func viewDidLoad() {
    super.viewDidLoad()

    fizzBuzzURL = NSURL(string: fizzBuzzString)
    fizzURL = NSURL(string: fizzString)
    buzzURL = NSURL(string: buzzString)
}

@IBAction func checkTextField(_ sender: UITextView){

    enteredValue = userInput.text

    let checkIfEmpty = userInput.text?.isEmpty

    if (checkIfEmpty == false) {
    let multipleOf3:Int = Int(enteredValue)!%3
    let multipleOf5:Int = Int(enteredValue)!%5

        if (multipleOf3 == 0 && multipleOf5 == 0) {
            fizzBuzz.text = "FizzBuzz"
            URLSession.shared.dataTask(with: (fizzBuzzURL as URL), completionHandler: {(fizzBuzzData, resp, error) -> Void in
                if (error != nil && fizzBuzzData != nil){
                    OperationQueue.main.addOperation ({
                        self.displayImage.image = UIImage(data: fizzBuzzData!)
                    })
                }
                }).resume()}
        else if (multipleOf5 == 0){
            fizzBuzz.text = "Buzz"
            URLSession.shared.dataTask(with: (buzzURL as URL), completionHandler: {(buzzData, resp, error) -> Void in
                if (error != nil && buzzData != nil){
                    OperationQueue.main.addOperation ({
                        self.displayImage.image = UIImage(data: buzzData!)
                })
                }
                }).resume()}
        else if (multipleOf3 == 0){
            fizzBuzz.text = "Fizz"
            URLSession.shared.dataTask(with: (fizzURL as URL), completionHandler: {(fizzData, resp, error) -> Void in
                if (error != nil && fizzData != nil){
                    OperationQueue.main.addOperation ({
                        self.displayImage.image = UIImage(data: fizzData!)
                })
                }
                }).resume()}
        else {
            fizzBuzz.text = "Incorrect Value"
            displayImage.image = nil
        }
    }
}
设置

uiimageview内容模式为ScaleSpectFill


和clipsToBounds true

请检查您的IF条件。你已经写信了

if (error != nil && fizzBuzzData != nil){
                    OperationQueue.main.addOperation ({
                        self.displayImage.image = UIImage(data: fizzBuzzData!)
                    })
                }
从未执行过。请按以下方式制作

 if (error == nil && fizzBuzzData != nil){
                    OperationQueue.main.addOperation ({
                        self.displayImage.image = UIImage(data: fizzBuzzData!)
                    })
                }

查看您添加的条件,如果(error!=nil&&fizzBuzzData!=nil)您正在检查error不能为nil&data不能为nil。将其编写为(error==nil&&fizzBuzzData!=nil)不要在Swift中使用
NSURL
,请使用其本机对应项
URL
。你检查过你的if子句是否被命中了吗?这不是意味着如果没有错误,并且数据源不是nil,那么它应该用响应继续函数吗?根据你的代码,这意味着error对象有一些值。为什么要使用OperationQueue?如果发现某个主线程正忙,可以直接使用mainqueue。谢谢Gagan!这就解决了问题。现在你已经解释过了,它确实有道理。非常感谢!