Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带JSON和flatMap的Struct Init_Json_Initialization_Swift3_Flatmap - Fatal编程技术网

带JSON和flatMap的Struct Init

带JSON和flatMap的Struct Init,json,initialization,swift3,flatmap,Json,Initialization,Swift3,Flatmap,我对以下代码有问题。我正在下载JSON中的参与者列表,我想用接收到的数据填充Struct Actor。在我尝试对接收到的数据进行平面映射并尝试初始化struct Actor之前,一切都很正常。当我试图编译代码时,我得到一个错误:无法将类型“()”的值赋给类型[Actor]。错误对应于viewDidLoad ActorList=downloadActors()中的一行。有人建议谁来解决这个问题吗 import UIKit func downloadActors() { var request

我对以下代码有问题。我正在下载JSON中的参与者列表,我想用接收到的数据填充Struct Actor。在我尝试对接收到的数据进行平面映射并尝试初始化struct Actor之前,一切都很正常。当我试图编译代码时,我得到一个错误:无法将类型“()”的值赋给类型[Actor]。错误对应于viewDidLoad ActorList=downloadActors()中的一行。有人建议谁来解决这个问题吗

import UIKit

func downloadActors() {


var request = URLRequest(url: URL(string: "url...")!)

request.httpMethod = "POST"
let postString = "actorGroup=\("Superhero")"
request.httpBody = postString.data(using: .utf8)


let task = URLSession.shared.dataTask(with: request) { data, response, error in

DispatchQueue.main.async {

        guard let data = data, error == nil else {
            print("error=\(error)")
            return
        }


if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
            print("error : statusCode should be 200 but is \(httpStatus.statusCode)")
            print("response = \(response)")
        }

        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode == 200 {

            do {
                let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: AnyObject]

            guard let actorsJSON = json?["response"] as? [[String : AnyObject]]  else {
                    return
                }


            } catch {
                print("catch error")
            }


        }
}

  }

    task.resume()

}

func loadActors() -> [Actor] {
                        if let actors = actorsJSON as? [[String : AnyObject]] {
                            return actors.flatMap(Actor.init)

                        }
                    }
                    let  actorsArray = loadActors()



class MasterViewController: UITableViewController {

    var actorsList = [Actor]()

    var detailViewController: DetailViewController? = nil
    var objects = [Any]()


    override func viewDidLoad() {

        super.viewDidLoad()

        actorsList = downloadActors()


       print(actorsList)
结构参与者如下所示:

struct Job {

    let actorGroup: String
    let actorName: String

}

    extension Actor: JSONDecodable {
        init?(JSON: [String : AnyObject]) {
            guard let actorGroup = JSON["actorGroup"] as? String, let actorName = JSON["actorName"] as? String else {
                return nil
            }
            self. actorGroup = actorGroup
            self. actorName = actorName

        }
    }
应该是:

if let listActors = actorsJSON as? [[String : AnyObject]] {
编辑:有关更多信息,我想添加评论:


非常混乱的代码。<强>块中的函数是什么?为什么要键入check
actorsJSON
两次?计算的属性是
让listActors
。。。这可能是一个可选绑定(如果让…)。此外,在Swift中,
.mutableContainers
完全是胡说八道。最后一个JSON字典是Swift 3中的
[String:Any]

非常混乱的代码。<代码>中的函数<< /Cord>块是什么?为什么要键入check
actorsJSON
两次?计算属性是
let listActors…
,它可能是一个可选绑定(
如果let…
)。此外,在Swift中,
.mutableContainers
完全是胡说八道。最后,Swift 3中的JSON字典是
[String:Any]
?如果我把它从
do
块中放出来,那么我会得到一个错误“未解析标识符”,实际上你根本不需要函数包装器。正如瓦迪安所说,你能解决这个问题吗?你的代码中有很多问题/不完善之处。
if let listActors = actorsJSON as? [[String : AnyObject]] {