Проверка нескольких текстовых полей isEmpty с Json данными isNull в Swift IOS - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть 15 полей uitext, в которых я хочу проверить, как, если одно конкретное поле uitext пустое и для этого текстового поля json данные не пусты, тогда присвойте значение из json api этому конкретному полю uitext.

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, и у нас не должно быть более 5 if statement в коде. Даже при использовании if let для проверки работоспособности требуется 15 if let statement. Пожалуйста, помогите сделать это проверить и работать быстрее.

Ответы [ 3 ]

3 голосов
/ 27 февраля 2020

// Создаем коллекции выходов вашего текстового поля и из инспектора идентификации устанавливаем идентификатор доступности для ключа текстового поля, из которого вы хотите передать текст с 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
        }
2 голосов
/ 26 февраля 2020

Есть много решений. Один из них

    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
        }
    }
0 голосов
/ 26 февраля 2020

Поскольку у вас есть разные значения ключей для проверки, я думаю, что вы должны это сделать (надеемся увидеть лучшие идеи). Вы также можете использовать массивы текстовых полей, но значение ключа из 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, чтобы вы могли легко их использовать * 1007. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...