如何在pickerview中获得(used struct:codable)解析字符串的结果

时间:2018-03-20 10:18:53

标签: ios swift codable

我已经点击API并成功获得了响应。我在这里使用codable进行解析。但是无法得到特定的值。 ID?                 2.首先调用选择器,而不是加载我们解析的字符串。

从可编码中解析是非常粘的。如何获取其中的数组内容,如id值      可编码的部分:     struct理由:Codable {       让reason_and_whom_meet:两个?     }

struct both :Codable{
   let reason_list : [reasonlist]?
   let whom_meet : [nameList]?
}

struct reasonlist :Codable{
  let id: Int?    //This "id" i couldnt access. 
  let reason : String?
  enum CodingKeys: String, CodingKey {

  case reason
  case id
  }
}

struct nameList :Codable{
    let name : String?
    enum CodingKeys: String, CodingKey{
        case name
    }
}

我接受的json结构所做的可编码结构。我应该更改我使用的结构的结构。

如果你想要json值我也可以提供,但结构是json的精确层次结构。

代码部分:

do {
    let gotData = try JSONDecoder().decode(Reasons.self, from: data!)
    let persons = gotData.reason_and_whom_meet?.whom_meet

    self.wtmArray.add(persons)
    print(self.wtmArray)

    let reasons = gotData.reason_and_whom_meet?.reason_list
    self.reasonArray.add(reasons)
    print(self.reasonArray)

    let reasonID = gotData.reason_and_whom_meet?.reason_list![self.reasonID]
    print(reasons)
} catch let err {
    print("Error", err)
}

此外,首先调用选择器委托方法,但此时响应为空。怎么解决这个?我的选择器显示为空。响应如下:

"GoogleClassroomPoC.nameList(name: Optional(\"Teacher\"))"

但我需要在我的阵列中单独使用教师和校长。我应该将其转换为任何格式,还是可以直接在pickerview中显示。

我正在与这个解析斗争,请帮助!

1 个答案:

答案 0 :(得分:0)

我创建了一个简单的代码,类似于如何使其工作的方案。

1。简单的UIPickerView,其中包含reason reason_list both var data: both? @IBOutlet weak var picker: UIPickerView! override func viewDidLoad() { super.viewDidLoad() } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return self.data?.reason_list?.count ?? 0 } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return self.data?.reason_list?[row].reason } ViewController的单个组件。

data

最初,加载nil时,UIPickerViewUIButton,因此data不会显示任何内容。

2。我创建了一个UIPickerView来加载@IBAction func loadData(_ sender: UIButton) { let jsonString = """ { "reason_list": [ {"id": 1, "reason": "ABCD"}, {"id": 2, "reason": "WXYZ"} ] } """ if let data = jsonString.data(using: .utf8) { self.data = try? JSONDecoder().decode(both.self, from: data) DispatchQueue.main.async {[weak self] in self?.picker.reloadComponent(0) //HERE..!!! } } } 并重新加载 private saveFileData(upload: Upload): void { this.firebaseAuth.authState.subscribe(auth => { this.db.list(`uploads/${auth && auth.email && auth.uid}`).push(upload); }) } 。我使用了一些硬编码数据。您可以从API获取此数据。

this.firebaseAuth.authState.subscribe(auth => {
  if(auth && auth.email && auth.uid) {
this.uploadRef = this.db.list<any>(`uploads/${auth && auth.email && auth.uid}`);
    console.log("Gaunami profilio duomenys")
  }
  else {
    console.log("Nerandama img")
  }

})

如果您仍然遇到任何问题,请告诉我。