簡體   English   中英

如何使用來自 Alamofire 發布請求的 SwiftyJSON 填充下拉列表?

[英]How to populate dropdown list with SwiftyJSON from Alamofire post request?

我有一個下拉列表,我想填充來自 Alamofire 發布請求的數據。

我之前使用 SwiftyJSON 來填充表格視圖。 現在我添加了 Dropbox-iOS-SDK 並希望我能找到如何填充下拉列表。

AF.request(URL_COURSES, method: .post).responseJSON
{
        response in
        //printing response
        //print(response)
        
        switch response.result {
            case .success (let value):
            let json = JSON(value)
            
            for (key,subJson):(String, JSON) in json["courses"] {
                debugPrint (key) //key
                //debugPrint (subJson) //value

            self.myCourses.append(MyCourses(courseId: subJson["courseid"].rawValue as! Int,
                                                courseName: subJson["coursename"].rawValue as! String))

            }

            case .failure(let error):
            print(error)
            }

    self.dropDown.anchorView = self.viewDropDown
    self.dropDown.dataSource = //here i would like to see the list of courseId and courseName or only courseName

    dropDown.selectionAction = { [unowned self] (index: Int, item: String) in
    print("Selected item: \(item) at index: \(index)")
    self.labelTitle.text = coursesArray[index]
}

我用數組做了一個測試,下拉菜單工作正常。

{

    @IBOutlet weak var viewDropDown: UIView!
    @IBOutlet weak var labelTitle: UILabel!
    
    let dropDown = DropDown()
    let coursesArray = ["Mathematic 1","Geograhic 1","Astrophysics 1","English 1","French 1"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        labelTitle.text = "Select a Course"
        viewDropDown.layer.cornerRadius = 5
        dropDown.anchorView = viewDropDown
        dropDown.dataSource = coursesArray
        dropDown.bottomOffset = CGPoint(x: 0, y:(dropDown.anchorView?.plainView.bounds.height)!)
        dropDown.direction = .bottom
        DropDown.appearance().setupCornerRadius(5)
        DropDown.appearance().textColor = UIColor.lightGray
        dropDown.selectionAction = { [unowned self] (index: Int, item: String) in
            print("Selected item: \(item) at index: \(index)")
            self.labelTitle.text = coursesArray[index]
        }
    }
    
    @IBAction func showCoursesOptions(_ sender: Any) {
        dropDown.show()
    }
}

聲明字符串數組變量以存儲課程名稱:

var arrCourseName : [String] = []

然后創建一個方法來在之前創建的數組中存儲課程名稱:

func setCourseName(){
    arrCourseName = []
    myCourses.forEach { (json) in
        arrCourseName.append(json["coursename"].stringValue)
    }
    dropDown.dataSource = arrCourseName
}

從 api 獲取數據后立即調用上述方法。

我希望我走在正確的軌道上,這接近正確的代碼嗎? 目前我仍然收到以下錯誤

“MyCourses”類型的值沒有下標

 import Foundation
 
 struct MyCourses : Decodable {
 
     let coursename: String }

這就是我的課程結構

var myCourses = [MyCourses]()
let URL_COURSES = ".../v1/courselist.php"

var arrCourseName : [String] = []

public func getCourses() {

//Sending http post request
AF.request(URL_COURSES, method: .post).responseJSON
{
        response in
        
        switch response.result {
            case .success(let value):
            let json = JSON(value)

            self.arrCourseName = []
            self.myCourses.forEach { (json) in
                arrCourseName.append(json["coursename"].stringValue) //Error shows up in this line

                self.dropDown.anchorView = self.viewDropDown
                self.dropDown.dataSource = self.arrCourseName
            }

            case .failure(let error):
            print(error)
            }

      }
}

暫無
暫無

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

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