如何使用alamofire图像从json数组中检索图像?

时间:2018-05-02 11:50:07

标签: ios swift alamofire

以下是我用来从网址获取图片的代码,但代码崩溃时发布了下面的错误。请有人帮我解决这个问题。

let imageurl = Gift.imagesUrl.replacingOccurrences(of: "\n", with: "", options: .regularExpression)

Alamofire.request(imageurl, method: .get).responseImage { response in
    print(response)
}

ERROR:

 FAILURE: invalidURL("(    \"https://s3.amazonaws.com/webdevapp/app/public/spree/products/2/product/ri1.jpg?1476104874\")")

3 个答案:

答案 0 :(得分:0)

使用此代码

      let ImageURL = URL(string: "your image URL")!

      Alamofire.request(ImageURL).responseData { (response) in
         if response.error == nil {
            print(response.result)

           // Show the downloaded image:
             if let data = response.data {
                 self.downloadImage.image = UIImage(data: data)
            }                
        }
    }          

答案 1 :(得分:0)

let urlstring  = Gift.imagesUrl
    let string = urlstring.replacingOccurrences(of: "[\n \" )(]", with: "", options: .regularExpression, range: nil)

    Alamofire.request(string).responseImage{ response in
        print(response)
    }

答案 2 :(得分:0)

我不能让解决方案成为:

let string = urlstring.replacingOccurrences(of: "[\n \" )(]", with: "", options: .regularExpression, range: nil)

这是一个hacky解决方案,而不是一个可行的解决方案。这是一个糟糕的解决方案。

真正的问题是什么?获取imagesUrl的解析是错误的。

你这样做了:

var _imagesUrl:String? 
var imagesUrl:String 
{ 

    if _imagesUrl == nil 
    { 
        _imagesUrl = "" 
    } 
    return _imagesUrl! 
} 

if let image = giftherData["master_variant_images"] as? NSArray 
{
    self._imagesUrl = String(describing: image) 
}

怎么了?
不要在Swift3 +中使用NSArray。使用Swift数组。
不要使用String(describing:),这不符合你的想法。它调用了对象的description方法(在您的情况下为NSArray),这就是它添加(\n")的原因。你想要的是对象,而不是描述。

如果你的var imagesUrl只有一个,或者你只对第一个感兴趣,请不要用“s”调用它那个不清楚,而且是一个误导性的名字。

应该是:

if let imageStringURLs = giftherData["master_variant_images"] as? [String] { //Yes, use a Swift Array of String, not a NSArray
    self._imagesUrl = imageStringURLs.first //I took presumption that you are only interested in the first one, of not, then use an array to save them, not a String.
}  

或:

var _imagesUrl: [String]?
var imagesUrl: [String]?
//if nil as you did
if let imageStringURLs = giftherData["master_variant_images"] as? [String] { //Yes, use a Swift Array of String, not a NSArray
    self._imagesUrl = imageStringURLs
}  

然后,你只需:

Alamofire.request(Gift.imagesUrl).responseImage{ response in
        print(response)
}

或(使用数组)

let firstURL = Gift.imagesUrl[0] //Or if it's the second let secondURL = Gift.imagesUrl[1], etc.
Alamofire.request(firstURL).responseImage{ response in
        print(response)
}