gpt4 book ai didi

json - 我正在尝试从我的响应中打印数据,但出现错误

转载 作者:行者123 更新时间:2023-11-28 05:43:20 24 4
gpt4 key购买 nike

我只能打印 1 个数据,不能再打印了。这是我的错误:

Thread 1: Fatal error: Index out of range

这是我的 JSON:

[
{
"Guides": [
{
"_id": "5cbc780edfdb6307006aec37",
"Text": "He is one of Soroush Friend",
"Tavernier": 2
},
{
"_id": "5cbc781bdfdb6307006aec38",
"Text": "He is one of Soroush Friend",
"Tavernier": 2
}
]
}
]

这是我运行良好的结构:

struct GuideStruct: Codable {
let guides: [Guide]
enum CodingKeys: String, CodingKey {
case guides = "Guides"
}
}

struct Guide: Codable {
let id, text: String
let tavernier: Int
enum CodingKeys: String, CodingKey {
case id = "_id"
case text = "Text"
case tavernier = "Tavernier"
}
}

这是我的数组和我的类:

internal static var guides = [guidesarr]()

class guidesarr {
var _id : String
var Text : String
var Tavernier : Int
init(_id : String,Text : String,Tavernier : Int) {
self._id = _id
self.Text = Text
self.Tavernier = Tavernier
}
}

还有我在 View Controller 中的代码:

class GameViewController: UIViewController,UITextFieldDelegate {
typealias guide1 = [GuideStruct]
var i1 = 0
override func viewDidLoad() {
super.viewDidLoad()
let headers : HTTPHeaders = ["Content-Type":"application/json","OAtcp":"0!QSJ5SDG8Q39PPM$DXP5HD1E10"]
Alamofire.request("http://192.168.1.100:3535/DarkDiamonds/Api/GetActiveGames",method :.post,headers: headers).responseJSON { (newresponse) in
do {
let decoder = JSONDecoder()
let responseguide = try decoder.decode(guide1.self, from: newresponse.data!)
for each1 in responseguide {
let newstruct = guidesarr(_id:each1.guides[self.i1].id , Text: each1.guides[self.i1].text, Tavernier: each1.guides[self.i1].tavernier)
self.i1 = self.i1 + 1
AppDelegate.guides.append(newstruct)
}
print(AppDelegate.guides[0])
print(AppDelegate.guides[1])
print(AppDelegate.Games.count)
print(AppDelegate.guides[0].Text)
print(AppDelegate.guides[1].Text)
}catch {

}
}
}
}

我可以打印:

print(AppDelegate.guides[0])

然后打印:

print(AppDelegate.guides[0].Text)

但是当我想打印这个时:

print(AppDelegate.guides[1])
print(AppDelegate.guides[1].Text)

有错误:

Thread 1: Fatal error: Index out of range

最佳答案

您的代码中存在多个问题。

  1. guidesarr 类是不必要的。只需使用您的 Guide 结构即可。
  2. 使用正确的命名约定。类、结构和枚举名称应以大写字母开头。属性、函数和案例名称应以小写字母开头。
  3. 不要强制解包数据。安全地检查它并进行适当的错误检查。
  4. 您的主要问题是,您似乎真正想要的两 block 数据是一个(而不是两个)GuideStruct 实例中的两个 Guide 实例。

我会像这样重做您的代码:

class GameViewController: UIViewController,UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()

let headers : HTTPHeaders = ["Content-Type":"application/json","OAtcp":"0!QSJ5SDG8Q39PPM$DXP5HD1E10"]
Alamofire.request("http://192.168.1.100:3535/DarkDiamonds/Api/GetActiveGames", method: .post, headers: headers).responseJSON { (newresponse) in
if let data = newresponse.data {
do {
let decoder = JSONDecoder()
let guides = try decoder.decode([GuideStruct].self, from: data)
for guideStruct in guides {
AppDelegate.guides.append(contentsOf: guideStruct.guides)
}
print(AppDelegate.guides[0])
print(AppDelegate.guides[1])
print(AppDelegate.Games.count)
print(AppDelegate.guides[0].Text)
print(AppDelegate.guides[1].Text)
}catch {
// Bad JSON
}
} else {
// No data
}
}
}
}

并改变:

internal static var guides = [guidesarr]()

到:

internal static var guides = [Guide]()

并删除 guidearr 类。

关于json - 我正在尝试从我的响应中打印数据,但出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55785474/

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