Эврика: невозможно преобразовать значение типа «BaseRow?» к указанному типу «CustomPushRow?»

Я использую Eureka для своей формы, но столкнулся с проблемой. Я настраиваю форму, используя этот код

form +++ Section("Add Event")
        <<< TextRow("Event"){ row in
            row.title = "Event"
            row.placeholder = "Enter Event Name Here"
        }
        <<< DateRow("Date"){
            $0.title = "Date"
            $0.value = selectedDate

        }
        <<< TimeRow("Time"){
            $0.title = "Time"
            $0.value = selectedDate

    }
    let locationSearchTable = storyboard!.instantiateViewController(withIdentifier: "eventLocation") as! EventLocationViewController

    form +++ Section("Location")
        <<< CustomPushRow<EventLocationViewController>(){
            $0.title = "Location"
            $0.presentationMode = .segueName(segueName: "eventLocation" ,controllerProvider: locationSearchTable, onDismiss: nil)

    }

здесь пользовательский класс строки push

public final class CustomPushRow<T: Equatable>: SelectorRow<PushSelectorCell<T>, SelectorViewController<T>>, RowType {

public required init(tag: String?) {
    super.init(tag: tag)
    presentationMode = .show(controllerProvider: ControllerProvider.callback {
        return SelectorViewController<T>(){ _ in }
        }, onDismiss: { vc in
            print("On Dimiss")
            _ = vc.navigationController?.popViewController(animated: true)
    })
}

}

и когда я хочу изменить значение формы, я использую этот метод для изменения

    let eventName : TextRow? = form.rowBy(tag:"Event")
    eventName?.value = "asdasadsds"

но когда я хочу изменить настраиваемую строку push, у меня возникают проблемы с преобразованием значения типа «BaseRow?» к указанному типу «CustomPushRow?» когда я делаю это

   let row : CustomPushRow? = form.rowBy(tag: "Location")

Как я могу изменить значение CustomPushRow


person Community    schedule 16.03.2017    source источник


Ответы (1)


Попробуйте использовать вашу информацию по-другому (совет, который я получил от Swift: Как получить значения формы с помощью построителя форм Eureka? помог мне с другой проблемой "невозможно преобразовать значение...")

Чтобы ПРОЧИТАТЬ значение в строке, которая дает вам сообщение об ошибке:

  1. Обязательно установите теги для всех ваших элементов ($0.tag = "независимо")

  2. вместо

    пусть строка: CustomPushRow? = form.rowBy(тег: "Местоположение")

использовать

let dict = self.form.values(includeHidden: true)

Затем вы можете увидеть значение с чем-то вроде

print(dict["whatever"])

Теперь другая часть вашего вопроса касается УСТАНОВКИ значения, которое в Eureka отличается.

Из документации (https://github.com/xmartlabs/Eureka#how-to-set-the-form-values-using-a-dictionary):

Как установить значения формы с помощью словаря

Вызов setValues(values: [String: Any?]), который предоставляется классом Form.

Например:

form.setValues(["IntRowTag": 8, "TextRowTag": "Hello world!", "PushRowTag": Company(name:"Xmartlabs")])

Где «IntRowTag», «TextRowTag», «PushRowTag» — это теги строки (каждый из них однозначно идентифицирует строку), а 8, «Hello world!», Company(name: «Xmartlabs») — соответствующее значение строки для назначения.

person Apps-n-Add-Ons    schedule 15.11.2017