Я довольно приличный разработчик Objective C, и сейчас я изучаю Swift (что я нахожу довольно трудным, не только из-за новых концепций, таких как опционные, но также и потому, что Swift постоянно развивается, и большая часть доступные учебники сильно устарели).
В настоящее время я пытаюсь проанализировать JSON из URL-адреса в NSDictionary и затем использовать одно из его значений для отображения изображения (которое также является URL-адресом). Примерно так:
URL -> NSDictionary -> init UIImage из URL -> отображать UIImage в UIImageView
Это довольно просто в Задаче C (и может быть даже более короткий ответ):
NSURL *url = [NSURL URLWithString:@"https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY"];
NSData *apodData = [NSData dataWithContentsOfURL:url];
NSDictionary *apodDict = [NSJSONSerialization JSONObjectWithData:apodData options:0 error:nil];
Приведенный выше фрагмент кода возвращает мне стандартный NSDictionary, в котором я могу обратиться к ключу "url", чтобы получить адрес изображения, которое я хочу отобразить:
"url": "https://apod.nasa.gov/apod/image/1811/hillpan_apollo15_4000.jpg"
Затем я преобразую его в UIImage и передам его в UIImageView:
NSURL *imageURL = [NSURL URLWithString: [apodDict objectForKey:@"url"]];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *apodImage = [UIImage imageWithData:imageData];
UIImageView *apodView = [[UIImageView alloc] initWithImage: apodImage];
Теперь я в основном пытаюсь повторить приведенный выше код Objective C в Swift, но постоянно сталкиваюсь со стенами. Я перепробовал несколько учебных пособий (одно из которых на самом деле делало то же самое: отображать изображение NASA), а также нашел несколько ответов о переполнении стека, но ни одно из них не помогло, потому что они либо устарели, либо делают вещи не так, как мне нужно.
Итак, я хотел бы попросить сообщество предоставить код Swift 4 для решения следующих проблем:
1. Convert data from url into a Dictionary
2. Use key:value pair from dict to get url to display an image
Если это не так уж и много, я также хотел бы попросить подробные описания вместе с кодом, потому что я хотел бы, чтобы ответ был единственным всеобъемлющим "учебным пособием" для этой задачи, которое, я считаю, в настоящее время нигде не доступно.
Спасибо!