Вот фрагмент кода, который я использовал для получения изображений с 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\")")
Можете ли вы опубликовать, как вы устанавливаете значение для Gift.imagesUrl
на самом деле я получаю ответ как: FAILURE: invalidURL ("(\ n \" s3.amazonaws.com/webdevapp/app/public/spree/products/2/pro duct /… \ "\ n)") ... "/ n" включен в ответ json как дополнение, которого нет в json. Можете ли вы сказать мне, как получить правильный URL-адрес изображения с сервера без "/ n".
var _imagesUrl: Строка? var imagesUrl: String {if _imagesUrl == nil {_imagesUrl = ""} return _imagesUrl! } если let image = giftherData ["master_variant_images"] как? NSArray {self._imagesUrl = String (описывающий: изображение)} ... Gift - это имя класса объекта модели
NSArray
в Swift 3+, нет. Используя String(describing:someNSArray)
, нет и нет. Используйте self._imagesUrl = image.first
Ваш вопрос непонятен. Подскажите пожалуйста, что такое Gift.imagesUrl. что вы хотите от него в Аламофре?
@Larme, я получаю сообщение об ошибке "FAILURE: invalidURL (" (\ n \ "s3.amazonaws.com/webdevapp/app/public/spree/products/2/pro duct /… \" \ n) ")"
Правильно проанализируйте свой JSON, поэтому отредактируйте с ним свой вопрос и то, как вы его анализируете
у меня есть решение .......... let urlstring = Gift.imagesUrl let string = urlstring.replacingOccurrences (of: "[\ n \") (] ", with:" ", options: .regularExpression, range : nil)
Пожалуйста, ответьте на свой вопрос самостоятельно, вместо того, чтобы редактировать вопрос своим решением.
Используйте этот код
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)
}
}
}
я получаю ОТКАЗ: invalidURL ("(\ n \" s3.amazonaws.com/webdevapp/app/public/spree/products/2/pro duct /… \ "\ n)")
У меня есть решение ....... let urlstring = Gift.imagesUrl let string = urlstring.replacingOccurrences (of: "[\ n \") (] ", with:" ", options: .regularExpression, range: nil)
let urlstring = Gift.imagesUrl
let string = urlstring.replacingOccurrences(of: "[\n \" )(]", with: "", options: .regularExpression, range: nil)
Alamofire.request(string).responseImage{ response in
print(response)
}
Это хакерское решение. Настоящая проблема связана с плохим синтаксическим анализом. Это не жизнеспособное решение при окончательной доставке.
Я не могу допустить, чтобы решение было:
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
, "
, )
. Вам нужен объект, а не описание.
Не называйте свой 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)
}
Gift.imagesUrl.replacingOccurrences(of:...)
Почему? Что такоеGift.imagesUrl
на самом деле? Как ты получил это? Вам нужно его правильно разобрать и использовать.