gpt4 book ai didi

ios - 为什么元素被替换而不是追加?

转载 作者:行者123 更新时间:2023-11-28 11:06:13 26 4
gpt4 key购买 nike

我正在读取一个非常大的 json 文件并提取数据。我目前可以提取正确的数据,但是当我尝试将其附加到数组时,它最终会替换它。

func parseJSON(json: JSON){

let predicate = {
(json: JSON) -> Bool in
if let jsonID = json["class"].string where jsonID == "sg-header-heading"{

return true

}
return false
}
var backclass = ViewController()
let foundJSON = json.findmultiple(backclass, predicate: predicate)

使用此扩展搜索匹配“sg-header-heading”的多个值当我在扩展中打印数组时,这就是我得到的。但是当我在上面打印它时,我得到了零。另外,我最后只得到一个值,而不是 6 个值。

enter image description here

extension JSON{

func findmultiple(viewclass: ViewController, @noescape predicate: JSON -> Bool) -> JSON? {

var backclass = ViewController()

if predicate(self) {
return self
}
else {
if let subJSON = (dictionary?.map { $0.1 } ?? array) {
for json in subJSON {

if let foundJSON = json.findmultiple(backclass, predicate: predicate) {
let shorten = foundJSON["html"].stringValue
let firstshort = shorten.componentsSeparatedByString(" ")
let secondshort = firstshort[1].componentsSeparatedByString("\r")
let classname = secondshort[0]
if(classname == "STUDY HALL (INSTRUCT)"){
print("skip")
}else{
backclass.importClass.append(classname)
print("fsgsfg \(backclass.importClass)")
//backclass.collection.reloadData()
}


}
}
}
}

return nil
}
}

最佳答案

您首先从最外层的上下文调用 findmultiple() (let foundJSON = json.findmultiple(predicate))。随着代码的执行和 findmultiple() 的实际执行,它会创建一个新实例 with var backclass = ViewController()。当代码进入其循环时,它会再次递归地执行 findmultiple()。随着代码再次进入其循环,它会创建一个新的 backclass 实例。每次循环时,递归都会更深,每次都会创建一个新的 ViewController 实例,因此 backclass 总是指向一个新的 ViewController< 实例.

对此的解决方案是在更高级别创建 backclass。您可以尝试这样的方法:

var backclass = ViewController()
let foundJSON = json.findmultiple(backclass, predicate)

请注意,这意味着从发生递归调用的循环内部将 backclass 传递给 findmultiple

关于ios - 为什么元素被替换而不是追加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403681/

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