如何使用来自 Alamofire 发布请求的 SwiftyJSON 填充下拉列表?
Posted
技术标签:
【中文标题】如何使用来自 Alamofire 发布请求的 SwiftyJSON 填充下拉列表?【英文标题】:How to populate dropdown list with SwiftyJSON from Alamofire post request? 【发布时间】:2022-01-16 05:32:42 【问题描述】:我有一个下拉列表,我想用来自 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()
【问题讨论】:
不相关但 AF 5 可以直接解码为带有Decodable
的模型。 SwiftyJSON
是一个很棒的工具,但同时已经过时了。实际上你做了三个转换 JSON -> Dictionary > SwiftyJSON -> Model。这是非常低效的
"我有一个下拉列表" 什么是下拉列表?一个叫“DropDown”的人是从哪里来的?
在我的示例中,您将如何使用带有 Decodable 的模型?
【参考方案1】:
声明字符串数组变量来存储课程名称:
var arrCourseName : [String] = []
然后在之前创建的数组中创建一个存储课程名称的方法:
func setCourseName()
arrCourseName = []
myCourses.forEach (json) in
arrCourseName.append(json["coursename"].stringValue)
dropDown.dataSource = arrCourseName
从 api 获取数据后立即调用上述方法。
【讨论】:
如果它对您有帮助,请投票支持我的答案,并通过给予“绿权”将其添加到正确答案中。谢谢:) 我把你的代码放进了我的 func getCourses。如您所见。 我收到错误:'MyCourses' 类型的值没有下标' 我找到了解决方案:NSArray to String Array ... 仅适用于所有阅读此内容的人以上是关于如何使用来自 Alamofire 发布请求的 SwiftyJSON 填充下拉列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何显示来自 Alamofire 请求的 JSON 数组响应的某些部分
如何在 Alamofire 请求 swift 3 上发出警报