繁体   English   中英

我正在尝试从我的回复中打印数据,但出现错误

[英]I'm trying print data from my response but there is an error

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

线程 1:致命错误:索引超出范围

这是我的 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
    }
}

我在视图控制器中的代码:

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)

有错误:

线程 1:致命错误:索引超出范围

您的代码中有几个问题。

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

我会重做你的代码是这样的:

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类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM