Как получить изображения из массива json, используя изображение alamofire? - PullRequest
0 голосов
/ 02 мая 2018

Вот фрагмент кода, который я использовал для получения изображений из URL, но код вылетает с ошибкой, опубликованной ниже. Пожалуйста, кто-нибудь, помогите мне разобраться в этом.

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

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

ОШИБКА:

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

Ответы [ 3 ]

0 голосов
/ 05 мая 2018
let urlstring  = Gift.imagesUrl
    let string = urlstring.replacingOccurrences(of: "[\n \" )(]", with: "", options: .regularExpression, range: nil)

    Alamofire.request(string).responseImage{ response in
        print(response)
    }
0 голосов
/ 05 мая 2018

Я не могу допустить, чтобы решение было:

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

Это хакерское решение, а не жизнеспособное. Это плохое решение.

В чем реальная проблема? Разбор для получения 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) 
}

Что не так?
Не используйте NSArray в Swift3 +. Используйте Swift Array.
Не используйте String(describing:), это не делает то, что вы думаете, что делает. Он вызывает description метод объекта (в вашем случае NSArray), поэтому он добавил (, \n, ", ). Вы хотите объект, а не описание.

Не называйте вашу переменную 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)
}
0 голосов
/ 02 мая 2018

Используйте этот код

      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)
            }                
        }
    }          
...