«Значение типа [Укрытие] не имеет члена« имя »» - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь проанализировать конечную точку для некоторого JSON в Swift и использовать элемент name в качестве заголовка моей ячейки.Я создал структуру, которая соответствует данным, предлагаемым конечной точкой.Однако, когда я пытаюсь использовать его в качестве имени своей ячейки, я получаю сообщение об ошибке Value of type [Shelter] has not member 'name'.

Некоторые фрагменты кода:

Это мои определенные структуры:

Shelters.swift:

struct Shelters: Codable {
    var objects: [Shelter]
}

Shelter.swift:

struct Shelter: Codable {
    var name: String
    var shortdescription: String
    var lastedited: String
}

Наконец, это из моего ViewController.

var shelters = [Shelter]()


override func viewDidLoad() {
    super.viewDidLoad()

    performSelector(inBackground: #selector(backgroundProc), with: nil)
}

@objc func backgroundProc() {
    let shelterUrl = "https://192.168.1.10/api/shelters/?format=json"
    if let url = URL(string: shelterUrl) {
        if let data = try? Data(contentsOf: url) {
            parse(json: data)
        }
    }
}

//JSON Parser
func parse(json: Data) {

    let decoder = JSONDecoder()

    if let jsonShelters = try? decoder.decode(Shelters.self, from: json) {
        shelters = jsonShelters.objects
    }
}

Здесь код не работает:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   return shelters.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Shelters", for: indexPath)
    cell.textLabel?.text = shelters.name[indexPath.row] //It fails right here. With the error: Value of type '[Shelter]' has no member 'name'
    cell.detailTextLabel?.text = "Shelter"
    return cell
}

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Использование cell.textLabel?.text = shelters[indexPath.row].name

0 голосов
/ 01 июля 2019

Value of type [Shelter] has not member 'name'

Если вы внимательно посмотрите на описание ошибки, это говорит о том, что переменная Type: [Shelter] не имеет атрибута с именем name.Другими словами, <#Obj#>.name является свойством Shelter, а НЕ [Shelter].

Поэтому вам нужно ссылаться на объект вместо массива в ошибочной строке, используя: shelters[indexPath.row], а затемВы можете получить доступ shelters[indexPath.row].name.

Ваша линия должна быть:

cell.textLabel?.text = shelters[indexPath.row].name

...