Ошибка 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
изображение для данного имени изображения, это изображение просто не появляется в массиве.