我正在尝试使用swift库{{基于safety_rating_id
从数组(称为score
)中提取变量(array
,submission_id
等) 1}}(https://github.com/ankurp/Dollar)' s Dollar
方法,以便我以后可以发出POST请求(最终,我希望能够用拉出的数组替换参数中的硬编码值变量)与它们但我的find
结果都返回nil。
这些是我想要的内部数组find
submission_id
来自此数组https://codeshare.io/zr1pw(第22-36行):
27
代码:
{
"submission_id" : "27",
"name" : "Equipment",
"task_id" : "37",
"points" : "10",
"safety_rating_id" : 105,
"score" : "9"
}, {
"submission_id" : "27",
"name" : "Emergency Equipment",
"task_id" : "37",
"points" : "10",
"safety_rating_id" : 106,
"score" : "9"
}
更新
我能够使用 var array: [JSON] = []
func submitScore(onCompletion: () -> (), onError: ((NSError) -> ())? = nil) {
guard let endPoint = Data.sharedInstance.submitScoreEndpoint
else { print("Empty endpoint"); return }
let user = Users()
let test = $.find(self.array, callback: { $0 == 27 })
print(test)
let Auth_header = [
"Authorization" : user.token,
]
let parameters: [String:Array<[String:Int]>] = [
"ratings" : [
[
"safety_rating_id" : 105,
"schedule_job_id" : 18,
"score" : 9,
"submission_id" : 27
],
[
"safety_rating_id" : 106,
"schedule_job_id" : 18,
"score" : 10,
"submission_id" : 27
]
]
]
Alamofire.request(.POST, endPoint, headers: Auth_header, parameters: parameters, encoding: .JSON)
.validate()
.responseJSON {
response in
switch response.result {
case .Success(let data):
let json = JSON(data)
print(json)
onCompletion()
case .Failure(let error):
print("Request failed with error: \(error)")
onError?(error)
}
}
}
获取数组27但我想从两个submission_id
数组 AND <中移除name
和task_id
/ em>添加我从其他地方获得的submission_id : 27
。
我尝试使用schedule_job_id
循环从我想要的变量创建自己的数组,但我一直遇到for in
崩溃。这就是新数组的外观https://codeshare.io/3VJSo
最终我想做一个nil
答案 0 :(得分:2)
我认为您使用的是$
错误。
当你在$.find
上调用self.array
时,数组包含JSON对象,不确定对象究竟是什么,但我认为它是字典。
所以我认为你应该这样做:
let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 }).first
然后,我会避免这种力量打开字典。只是为了让你在一行代码中理解我的观点。
修改强>
然后你可以迭代数组并提取你的字段:
let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 })
for json in jsonWithMySubmissionId {
json["name"] = nil
json["task_id"] = nil
...
}
答案 1 :(得分:2)
因此,在回调内部传递的是数组中的每个元素,因此您将传递字典对象。所以如果你想在数组中找到一个特定的项目,你应该做
let test = $.find(array) { $0["submission_id"]! == "27" }
如果您希望数组中提交ID为27的所有元素都使用filter
let test = array.filter { $0["submission_id"]! == "27" }
要从字典对象中删除属性,您需要在阵列上的每个项目上调用removeValueForKey
方法。
let jsonWithMySubmissionId = self.array.filter ({ $0["submission_id"]! == 27 })
for json in jsonWithMySubmissionId {
json.removeValueForKey("name")
json.removeValueForKey("task_id")
...
}
答案 2 :(得分:2)
for循环中的pickerkState = new UIPicker<string>(FieldDefinitions.StateField)
{
HeightRequest= DeviceDisplaySettings.defaultheight * 0.05
};;
pickerState.Title = currentVM.State;
pickerState.SelectedIndex = 0;
pickerState.SelectedIndexChanged += (sender, args) =>
{
pkState.Title = pkState.Items[pkState.SelectedIndex];
txtPostalCode.Focus();
};
必须是dic
的类型。因为您无法操纵NSMutableDictionary
。
第二件事是没有类似NSDictionary
的方法。
您应该使用removeValueForKey
或removeObjectForKey
。
在removeObjectsForKeys
中,您必须传递参数数组(键作为参数)。
在removeObjectsForKeys
中,您可以传递一个字符串(键)作为参数。