Json &引用;[SHEENT]类型的值没有成员';名称'&引用;

Json &引用;[SHEENT]类型的值没有成员';名称'&引用;,json,swift,performselector,Json,Swift,Performselector,我试图在Swift中解析某个JSON的端点,并使用名称成员作为单元格的标题。我已经创建了一个结构,它符合端点提供的数据。但是,当尝试将其用作我的单元格名称时,我得到了错误类型[SHEERD]的值没有成员“name” 一些代码片段: 这是我定义的结构: swift: struct Shelters: Codable { var objects: [Shelter] } Shelter.swift: struct Shelter: Codable { var name: Strin

我试图在Swift中解析某个JSON的端点,并使用
名称
成员作为单元格的标题。我已经创建了一个结构,它符合端点提供的数据。但是,当尝试将其用作我的单元格名称时,我得到了错误
类型[SHEERD]的值没有成员“name”

一些代码片段:

这是我定义的结构:

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
}
使用
cell.textlab?.text=hedders[indexath.row].name
类型[hedder]的值没有成员“name”

如果仔细查看错误描述,它会告诉您
类型的变量
[shedder]
没有名为
name
的属性。换句话说,
.name
避难所
的属性,而不是
[避难所]

因此,您需要引用一个对象,而不是失败行上的数组,使用:
hedders[indexath.row]
,然后您可以访问
hedders[indexath.row].name

您的线路应该是:


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

您的答案与Gereon的答案有何不同?@PGDev这确实很有道理。谢谢