首页 > 解决方案 > 我正在尝试将值附加到字符串数组

问题描述

func getCategoryNames() {
  Alamofire.request(categoriesUrl).responseJSON { (response) in
        if ((response.result.value) != nil) {
             var jsonVar = response.result.value as! [String: Any]
             if let results = jsonVar["result"] as? [[String: Any]] {
                for result in results {
                    if let names = result["name"] as? String {
                         var tuy = [""]
                        tuy.append(names)

我试图将这些值(名称)放入 tab(titleNames: tuy) 但它只打印数组 Url 的最后一个元素是

let categoriesUrl = "https://cmsbmnc.agritechie.com/client/categories/"

我需要这样的输出 tuy = ["ABC", "DEF","XYZ"]

let configure = SGPageTitleViewConfigure()
configure.indicatorStyle = .Default
configure.titleAdditionalWidth = 35
self.pageTitleView = SGPageTitleView(frame: CGRect(x: 0, y: pageTitleViewY, width: self.view.frame.size.width, height: 80), delegate: self, titleNames: tuy, configure: configure)
self.view.addSubview(self.pageTitleView!)

标签: swiftalamofire

解决方案


在循环的每次迭代中,您都在创建一个新tuy数组。

您必须在循环之前创建一次数组并将其声明为常规空数组

func getCategoryNames() {
  Alamofire.request(categoriesUrl).responseJSON { (response) in
        if let jsonVar = response.result.value as? [String: Any],
           let results = jsonVar["result"] as? [[String: Any]] {
                var tuy = [String]()
                for result in results {
                    if let name = result["name"] as? String {
                        tuy.append(name)

或者以更方便的方式

func getCategoryNames() {
  Alamofire.request(categoriesUrl).responseJSON { (response) in
        if let jsonVar = response.result.value as? [String: Any],
           let results = jsonVar["result"] as? [[String: Any]] {
                let tuy = results.compactMap { $0["name"] as? String }

推荐阅读