如何在 Swift4 中获取 PushRow 的值和 id_value

How to get value and id_value for PushRow in Swift4

我的项目使用 xCode 9、swift 4 和 "Eureka form library"。

情况

我有一个汽车列表,其名称和唯一 ID 是这样关联的:0 - ANY,1 - VW,7 - AUDI,20 - MAZDA

var name_cars: [String] = ["ANY","VW","AUDI","MAZDA"]

var id_cars:[Int] = [0, 1, 7, 20]

我还有一个包含 "PushRow" 和 "ButtonRow" 的表格。 单击我要打印所选汽车名称和 ID 的按钮。 我可以打印汽车的名称,但不能打印 ID。

import UIKit
import Eureka

class myPage: FormViewController {

    var cars: [String] = ["ANY","VW","AUDI","MAZDA"]
    var id_cars:[Int] = [0, 1,7,20]

    var selected_car: String = "ANY" //default car
    var selected_car_id: Int = 0 //default id car

    override func viewDidLoad() {
        super.viewDidLoad()

        create_form()
    }

    func create_form(){

        form
        +++ Section("List")

        //list
        <<< PushRow<String>() {
            [=12=].title = "Cars"
            [=12=].options = cars
            [=12=].value = "ANY"

            [=12=].tag = "list_element"
            [=12=].selectorTitle = "Choose car"
            [=12=].onChange { [unowned self] row in
                self.selected_car = row.value!
                self.selected_car_id = ??? // **what should it be here in order to get the ID**
            }

        }

        //button
        <<< ButtonRow("Button1") {row in
            row.title = "Get Value on Console"
            row.onCellSelection{[unowned self] ButtonCellOf, row in
                print ("Car selected = ",self.selected_car, " and Id_Car_Selected = ",self.selected_car_id)
            }
        }
   }
}

首先请遵守class名称以大写字母开头,变量名是lowerCamelCased而不是[=的命名规则25=].

Swift 是一种面向对象的语言。而不是两个单独的数组使用自定义结构 Car.

import UIKit
import Eureka

struct Car : Equatable {
    let name : String
    let id : Int
}

推送行声明为 PushRow<Car>() 并且 属性 displayValueFor 填充了名称

class MyPage: FormViewController {

    let cars = [Car(name: "ANY", id: 0), Car(name: "VW", id: 1), Car(name: "AUDI", id: 7), Car(name: "MAZDA", id: 20)]

    var selectedCar : Car!

    override func viewDidLoad() {
        super.viewDidLoad()
        selectedCar = cars[0]
        createForm()
    }


    func createForm() {

        form
            +++ Section("List")

            //list
            <<< PushRow<Car>() {
                [=11=].title = "Cars"
                [=11=].options = cars
                [=11=].value = selectedCar
                [=11=].displayValueFor = {
                    guard let car = [=11=] else { return nil }
                    return car.name
                }

                [=11=].tag = "list_element"
                [=11=].selectorTitle = "Choose car"
                [=11=].onChange { [unowned self] row in
                    self.selectedCar = row.value!
                }

            }

            //button
            <<< ButtonRow("Button1") {row in
                row.title = "Get Value on Console"
                row.onCellSelection{[unowned self] ButtonCellOf, row in
                    print ("Car selected = ", self.selectedCar.name, " and Id_Car_Selected = ", self.selectedCar.id)
                }
        }
    }
}