Я пытаюсь добавить значения в массив строк - PullRequest
0 голосов
/ 25 января 2019
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)

Я пытаюсь поместить эти значения (имена) во вкладку (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!)

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Вы можете объявить переменную массива вне функции.

var tuy = [String]()

 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 {
                        tuy.append(names)
                   }
                }
          }
0 голосов
/ 28 января 2019

Это просто!Удалите этот строковый массив var tuy = [""] из

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)

и объявите его над функцией.

0 голосов
/ 25 января 2019

В каждой итерации цикла вы создаете новый массив 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 }
...