Как преобразовать массив изображений в строку - PullRequest
0 голосов
/ 30 сентября 2018

Я могу получить JSON из API.Я заполнил все остальные виды, кроме imageView.У меня есть массив изображений, которые являются строковыми URL-адресами.Я хочу скачать эти изображения.Я сейчас использую SDWebImage.Мне нужно преобразовать этот массив в строку, чтобы я мог получить изображения.В настоящее время я получаю сообщение об ошибке, так как URL должен быть строкой

Невозможно преобразовать значение типа '[Images]?'к ожидаемому типу аргумента 'String'

import SDWebImage

class AlbumCell: UITableViewCell {
    @IBOutlet weak var albumImageView: UIImageView!

    var album: Album? {
        didSet {
            guard let url = URL(string: album?.image) else { return }

            albumImageView.sd_setImage(with: url, completed: nil)
        }
    }
}

struct Album: Decodable {
    let name: String
    let image: [Images]
    let artist: String
}

struct Images: Decodable {
    let text: String
    let size: String

    enum CodingKeys: String, CodingKey {
        case text = "#text"
        case size
    }
}

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Ваша структура Album содержит изображение свойства, представляющее собой массив структуры Images.В вашем URL(string: album?.image) конструктор URL ожидает строку, но вы предоставляете массив изображений.

Вы можете сделать что-то вроде URL(string: album?.image[0].text), чтобы получить строку из массива изображений.При этом будет получено первое изображение из массива изображений. Вы можете изменить этот индекс в соответствии со своими потребностями, чтобы получить остальные изображения.

0 голосов
/ 30 сентября 2018

Невозможно преобразовать значение типа '[Images]?'к ожидаемому типу аргумента 'String'

Изображения - это структура, вам нужен URL из структуры.Например,

let urlstring:String = Images.text

Но изображение вашего альбома представляет собой массив изображений, вам нужно извлечь эти элементы изображения, используя цикл for

for element in album.image { // need to consider each element in the array
     guard let url = URL(string: element.text) else {return} //then 
     albumImageView.sd_setImage(with: url, completed: nil)
0 голосов
/ 30 сентября 2018

Преобразование массива пути изображения в строку в кодировке base64.

Преобразование ваших ImagePaths (Strings) в NSData и из NSData обратно в строку через base64EncodedStringWithOptions:

Здесь код:

NSArray *recipeImages = [savedImagePath valueForKey:@"Image"];
NSMutableArray *mutableBase64StringsArray = @[].mutableCopy;

for (NSString *imagePath in recipeImages)
{
    NSData *imagePathData = [imagePath dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64ImagePath = [imagePathData base64EncodedStringWithOptions:0];
    [mutableBase64StringsArray addObject:base64ImagePath];
}
...