在Swift IOS中用Json数据isNull验证多个文本字段isEmpty



我有15个uitextfield要验证,比如,如果一个特定的uitextfield为空,而该文本字段的json数据不为空,那么将json-api中的值分配给该特定的uitxtfield。

if textFieldO.text == "" && json.childArr[0].childPara[0].textOn != nil {
textFieldO.text = json.childArr[0].childPara[0].textOn
}
if textFieldu.text == "" && json.childArr[0].childPara[0].textip != nil {
textFieldu.text = json.childArr[0].childPara[0].textip
}
if textFieldw.text == "" && json.childArr[0].childPara[0].textwi != nil {
textFieldw.text = json.childArr[0].childPara[0].textwi
}
if textFieldq.text == "" && json.childArr[0].childPara[0].textqt != nil {
textFieldq.text = json.childArr[0].childPara[0].textqt
}
if textFieldy.text == "" && json.childArr[0].childPara[0].textyoo != nil {
textFieldy.text = json.childArr[0].childPara[0].textyoo
}
.
.
.
.
if textField15.text == "" && json.childArr[0].childPara[0].text159 != nil {
textField15.text = json.childArr[0].childPara[0].text159
}

--

{
"childArr":[
"childPara":[
"text159":"value",
"textOn":"value",
"textwi":"value",
"anotherKey":"value",
"textqt":"value",
"textip":"value",
"text159":"value",
"textyoo":"value",
],
"childTPara": [],
],
"childIArr":[],
}

这有这么多if statement,代码中的if statement不应该超过5个。即使在使用if let时,也需要15if let statement来检查功能。请帮助它更快地进行验证和工作。

有很多解决方案。其中一个

let childPara = json.childArr[0].childPara[0]
let array = [
(textFieldO, childPara.textOn),
(textFieldu, childPara.textip),
(textFieldw, childPara.textwi),
(textFieldq, childPara.textqt)
]
array.forEach { element in
if element.0.text == "" && element.1 != nil {
element.0.text = element.1
}
}

//创建文本字段的出口集合,并从身份检查器将可访问性标识符设置为要从json提供文本的文本字段的键。如果你有任何问题,请告诉我。

@IBOutlet var allFields: [UITextField]!
for textField in allFields {
// You need to store "text159":"value", as key and value in a object.
let obj = json.childArr[0].childPara[0].filter({$0.key == textField.accessibilityIdentifier})
textField.text = obj.first?.value
}

由于有不同的键值要验证,我认为您必须这样做(希望看到更好的想法(。您也可以使用textfield数组,但json中的键值会使验证变得有点棘手。我认为你可以写一个方法并调用它

private func set(textField: UITextField, value: String?) {
guard !textField.hasText else {
return
}
textField.text = value ?? "defaultValue"
}

你可以像一样使用这种方法

set(textField: textFieldO, value: json.childArr[0].childPara[0].textOn)

我建议使用结构模型来保存json数据,这样你就可以很容易地使用它