Я не могу допустить, чтобы решение было:
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)
}