簡體   English   中英

如何在pickerview中獲取(使用的struct:codable)解析字符串的結果

[英]How to get result of ( used struct:codable) parsing string in a pickerview

我點擊了API並成功獲得響應。 我在這里使用codable進行解析1.但是無法獲得特定的值。 ID? 2.首先調用選擇器,而不加載我們解析的字符串。

從可編碼解析有點粘。 如何獲取其中的數組內容,例如將id值放入其中。
可編碼部分:struct原因:可編碼{讓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.具有單個組件的簡單UIPickerView ,顯示both組件的reason_listreason

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時, datanil ,因此UIPickerView不顯示任何內容。

2.我創建了一個UIButton來加載data然后重新加載UIPickerView 我使用了一些硬編碼的數據。 您可以從API獲取此數據。

@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..!!!
         }
    }
}

讓我知道您是否仍然遇到任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM