Ошибка Swift 3: "Метки аргументов" (названные:_:,_:,) "не соответствуют никаким доступным перегрузкам" при попытке загрузить массив UIImage в UITableView

У меня возникла проблема при попытке загрузить массив изображений в UITableView с прототипом ячейки в другом контроллере представления.

Похоже, я не получил ответ от ошибки swift 3: метки аргумента '(_:)' не соответствуют ни одной из доступных перегрузок, так как я новичок и не могу получить объяснение из ответов.

Я получаю сообщение об ошибке в заголовке от:

let portraitsOfHeroes:[UIImage] = UIImage(named: "picture1", "picture2", "picture3")

при попытке создать массив изображений с помощью (portraitsOfHeroes):

import UIKit

class NewHeroVC: UIViewController, UITableViewDataSource {

let listOfHeroes:[String] = ["Name1", "Name2", "Name3"]
let portraitsOfHeroes:[UIImage] = UIImage(named: "picture1", "picture2", "picture3")

и используйте их через (cell.newHeroPortrait.image):

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "heroCell", for: indexPath) as! NewHeroCell
    cell.newHeroName.text = listOfHeroes[indexPath.row]
    cell.newHeroPortrait.image = portraitsOfHeroes[indexPath.row]
    return cell
}

По какой причине он возвращает ошибку в моем массиве?

2 ответа

Я думаю тебе нужно

let portraitsOfHeroes:[UIImage] = [UIImage(named: "picture1"), UIImage(named: "picture2"), UIImage(named: "picture3")

Ваша проблема в том, что UIImage(named:) может принимать только одно имя и возвращает только одно изображение. Вам нужно создать отдельный UIImage экземпляры для каждого имени изображения.

Если вы хотите избежать ввода UIImage(named:) часть снова и снова, вы можете использовать flatMap и массив имен файлов изображений:

let portraitsOfHeroes:[UIImage] = ["picture1", "picture2", "picture3"].flatMap { UIImage(named: $0) }

Преимущество этого подхода заключается в том, что он работает с отсутствующими изображениями. Если UIImage(named:) возвращает nil изображение для данного имени изображения, это изображение просто не появляется в массиве.

Другие вопросы по тегам