Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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
Ios 字典中的Swift结构数组抛出一个nil值_Ios_Arrays_Swift - Fatal编程技术网

Ios 字典中的Swift结构数组抛出一个nil值

Ios 字典中的Swift结构数组抛出一个nil值,ios,arrays,swift,Ios,Arrays,Swift,我有一个struct,需要将其转换为字典 structmodelfeedbackservices:Codable{ 让servicesId:String? 让我们看看我:字符串? 让类别:字符串? } 我有一个相同类型的数组ModelFeedbackServices private var selectedItems=[ModelFeedbackServices]() 我需要将此数组转换为字典,将其添加到我的参数中: var参数:[字符串:任意]?{ 变量参数:[字符串:任意]=[:] 切换自

我有一个
struct
,需要将其转换为字典

structmodelfeedbackservices:Codable{
让servicesId:String?
让我们看看我:字符串?
让类别:字符串?
}
我有一个相同类型的数组
ModelFeedbackServices

private var selectedItems=[ModelFeedbackServices]()

我需要将此数组转换为字典,将其添加到我的参数中:

var参数:[字符串:任意]?{
变量参数:[字符串:任意]=[:]
切换自身{
案例提交(让服务,让评论):
////////////////////////////////////////////////////////////////////////////////////
params[“FEEDBACK_SERVICES”]=SERVICES.asDictionary//这里是零!
////////////////////////////////////////////////////////////////////////////////////
参数[“注释”]=注释
返回参数
}
}
我已创建可编码的扩展名:

扩展名可编码{
var asDictionary:[字符串:任意]{
guard let data=try?JSONEncoder().encode(self)else{return nil}
return(try?JSONSerialization.jsonObject(with:data,options:.allowFragments)).flatMap{$0 as?[String:Any]}
}
}
问题是每次我在
services.asDictionary
switch
语句中得到
nil
值时

我需要这本字典看起来像这样

{
    "FEEDBACK_SERVICES": [
        {
            "SERVICE_ID": "8",
            "SERVICE_NAME": "ABC",
            "CATEGORY": "1"
        },
        {
            "SERVICE_ID": "4",
            "SERVICE_NAME": "ABC",
            "CATEGORY": "2"
        }
    ],
    "COMMENTS": "any comment"
}

任何想法都会很有帮助

您可以引入此
可编码
扩展来获取
字典
字典的
数组

typealias JSON = [String:  Any]

extension Encodable {

    /// Converting object to postable JSON
    func toDictionary(_ encoder: JSONEncoder = JSONEncoder()) -> JSON {
        guard let data = try? encoder.encode(self) else { return [:] }
        guard let object = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) else { return [:] }
        guard let json = object as? JSON else { return [:] }
        return json
    }

    /// Converting object to postable array of JSON
    func toDictionaryArray(_ encoder: JSONEncoder = JSONEncoder()) -> [JSON] {
        guard let data = try? encoder.encode(self) else { return [[:]] }
        guard let object = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) else { return [[:]] }
        guard let jsonArray = object as? [JSON] else { return [[:]] }
        return jsonArray
    }
}
用法

var parameters: [String: Any]? {
    var params: [String: Any] = [:]
    switch self {
    case .submit(let services, let comments):
////////////////////////////////////////////////////////////////////////////////////
       params["FEEDBACK_SERVICES"] = services.toDictionaryArray() // Here it comes as nil!
////////////////////////////////////////////////////////////////////////////////////
       params["COMMENTS"] = comments
       return params
   }
}

您的
反馈\u服务
是一个数组而不是字典。