Вот чем я закончил. Предполагается, что Helper.stringDateToTimestamp(date:)
вернет пустую строку, если в нее будет передана пустая строка.
Я написал расширение Array, чтобы помочь очистить операторы if
.
Я сделал вывод кода центрированным. Под этим я подразумеваю, что я просматривал каждый вывод по очереди и выяснял все условия, из-за которых он был записан. Это уменьшает повторяющиеся проблемы со словарем, которые у вас возникли с кодом.
Наконец, в нескольких местах я просто вставляю пустую строку, если данных нет, а затем очищаю ее в конце цикла.
Моя логика может быть не совсем правильной, но идея просто анализировать каждый выход отдельно, а не все входы, часто делает код более очевидным.
extension Array where Element == PIG_TYPES_ENUM {
func contains(pigText: String?) -> Bool {
guard let text = pigText else { return false }
return self.map { $0.rawValue }.contains(text)
}
}
func example() {
let allPigs: [PIG_TYPES_ENUM] = [.gilt, .offDutySow, .matingSow, .drySow, .farrow]
guard allPigs.contains(pigText: pigTypeTextField.text) else { return }
guard (parityTextField.text ?? "") == "" else {
pigData["parity"] = parityTextField.text!
return
}
if [.gilt, .offDutySow, .matingSow].contains(pigText: pigTypeTextField.text) {
pigData["arrivalDate"] = Helper.stringDateToTimestamp(date: arrivalDateTextField.text ?? "")
pigData["herdEntryDate"] = Helper.stringDateToTimestamp(date: herdEntryDateTextField.text ?? "")
}
if [.offDutySow, .matingSow].contains(pigText: pigTypeTextField.text) {
pigData["startOffDutySowDate"] = Helper.stringDateToTimestamp(date: startOffDutySowDateTextField.text ?? "")
}
if [.matingSow].contains(pigText: pigTypeTextField.text) {
pigData["semenFromBoarID"] = semenFromBoarIDTextField.text ?? ""
pigData["technicianName"] = technicianNameTextField.text ?? ""
pigData["matingDate"] = matingDateTextField.text ?? ""
}
for (key, value) in pigData {
if value == "" {
pigData.removeValue(forKey: key)
}
}
}
Я написал обновленный Помощник для работы с вышеупомянутым:
class Helper {
private static let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy"
return formatter
}()
static func stringDateToTimestamp(date: String) -> String {
guard date.isEmpty == false else { return "" }
let date = formatter.date(from: date)
let dateStamp: TimeInterval = date!.timeIntervalSince1970
let timestamp: String = String(dateStamp)
return timestamp
}
}