gpt4 book ai didi

ios - 无法下标类型的值 - Swift 3

转载 作者:行者123 更新时间:2023-11-28 08:23:40 25 4
gpt4 key购买 nike

我是 Swift 的新手,正在尝试编写一个应用程序来解析网页中的 json。但是我收到了错误“无法下标‘[Dictionary]’类型的值”

我该如何解决这个问题?它发生多次。以下是我的代码。谢谢!

func grabData(results: [Dictionary<String, Any?>]){
guard let resultList = results as? [Dictionary<String, Any?>] else { return }
for iResult in resultList {
var tempResult = SearchResult()
tempResult.studentId = self.getInt(dict: [iResult], string: "StudentId")
tempResult.LastName = self.getString(dict: [iResult], string: "LastName")
tempResult.FirstName = self.getString(dict: [iResult], string: "FirstName")
tempResult.Major = self.getString(dict: [iResult], string: "Major")
tempResult.Year = self.getString(dict: [iResult], string: "Year")
tempResult.GPA = self.getDouble(dict: [iResult], string: "GPA")
self.results.append(tempResult)
}
DispatchQueue.main.async {
self.listTableView.reloadData()
}
}

func getString(dict: [Dictionary<String, Any?>], string: String) -> String? {
if let result = dict[Dictionary<String, Any?>] as? String {
return result
}
return nil
}

func getInt(dict: [Dictionary<String, Any?>], string: String) -> Int? {
if let result = dict[string] as? Int {
return result
}
return nil
}

func getDouble(dict: [Dictionary<String, Any?>], string: String) -> Double? {
if let result = dict[string] as? Double {
return result
}
return nil
}

最佳答案

SearchResult.swift

struct SearchResult {
let studentID: Int
let lastName: String
let firstName: String
let major: String
let year: String
let gpa: Double

init?(json: [String:AnyObject]) {
guard let studentID = json["StudentID"] as? Int else {
return nil
}

guard let lastName = json["LastName"] as? String else {
return nil
}

guard let firstName = json["FirstName"] as? String else {
return nil
}

guard let major = json["Major"] as? String else {
return nil
}

guard let year = json["Year"] as? String else {
return nil
}

guard let gpa = json["GPA"] as? Double else {
return nil
}

self.studentID = studentID
self.lastName = lastName
self.firstName = firstName
self.major = major
self.year = year
self.gpa = gpa
}
}

ViewController.swift

func grabData(json: [String:AnyObject]) {
guard let searchResult = SearchResult(json) else {
return
}

self.results.append(searchResult)

DispatchQueue.main.async {
self.listTableView.reloadData()
}
}

这篇文章对我设计与 REST API 交互的模型很有帮助:https://developer.apple.com/swift/blog/?id=37

JSON 的结构也有所不同。

例如:

[
{
"StudentID": 12345,
"LastName": "Smith"
}
]

将表示为 [[String:AnyObject]](String 和 AnyObject 组合的数组)

如果你有这个,那么你需要循环遍历然后单独解析每个元素。

关于ios - 无法下标类型的值 - Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40662070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com