0

我正在考虑使用 plist 文件来配置如何将表单上传到我的服务器,但后来我意识到我不知道如何做其中的一个关键部分,或者即使这是可能的,因为你不能动态声明快速的变量。

基本上我正在考虑使用这样的字典

形式:

  • 属性名称:后端名称

然后在我的表单上传方法中,我会做一些看起来像这样的事情

formValues: [String:String] = [:]
form.forEach { (property_name, backend_name) in
  let value = someController[property_name] // to do the equivalent of someController.property_name
  formValues[backend_name] = value
}
// ...
formValues.forEach { (backend_name, value) in
  multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: backend_name)
}

问题是我不知道这部分怎么做

let value = someController[property_name]
4

2 回答 2

3

您要解决的问题是为服务器序列化数据。我不知道您尝试的方法在 Swift 中是否可行,但这绝对不是正确的方法。如果你使用的是 Swift 4,你可以创建Codable模型对象,所以这个序列化将全部在后台。否则,您很可能需要[String: Any]手动创建它。

使用 Codable 序列化/反序列化对象

于 2018-03-10T13:24:11.483 回答
0

我发现我怎么能做到。

formValues: [String:String] = [:]
form.forEach { (property_name, backend_name) in
  let value = Mirror(reflecting: someController).children.filter({ (child) -> Bool in
    return child.label == property_name
}).first!.value as! String
  formValues[backend_name] = value
}
// ...
formValues.forEach { (backend_name, value) in
  multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: backend_name)
}

我知道这是未优化的,因为我每个周期都重新创建了一个镜像,但它是出于演示目的

于 2018-03-10T13:55:43.097 回答