尝试从函数外部调用时,数组返回空[swift]

时间:2016-07-18 14:04:25

标签: swift alamofire

我有这个叫api函数:

func searchResults(){


    let urlString = "http://dev.jocom.com.my/feed"


    Alamofire.request(.POST, urlString , parameters: ["req" : "pro_name", "code" : searchString!])

        .responseData { response in

            switch response.result {
            case .Success:

                let apiSearchXML = SWXMLHash.parse(response.data!)

                for elem in apiSearchXML["rss"]["channel"]["item"]{
                    self.imageURL.append(elem["thumb_1"].element!.text!)

                    self.name.append(elem["name"].element!.text!)



                }
                print(self.name)

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

}

当我输出输出时,似乎没问题,数组包含了什么。但是当我试图将它调用显示在我的集合视图中时,它没有返回行,它变空了,为什么呢?

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {

    return 1
}


func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return self.name.count

}


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! SearchResultsCollectionViewCell

    cell.titleLabel.text = "abc"
    cell.setNeedsDisplay()
    return cell
}

3 个答案:

答案 0 :(得分:0)

你应该致电

dispatch_async(dispatch_get_main_queue()) { 
   collectionView.reloadData()
}

从服务器获得回调时。

答案 1 :(得分:0)

“Alamofire中的网络是异步完成的。”

这意味着,在您致电searchResults后,您的请求将会完成一段未知的时间。

您最好的策略是在成功模块中更新您的收藏视图。 (确保在主线程上进行UI更新。)

答案 2 :(得分:0)

您需要一个完成处理程序才能完成.agg({'male': 'sum', 'female':'sum'})调用,然后您可以使用结果填充数组。我相信你的Async是一个字符串数组。这样做:

name

然后当你打电话时,就像这样:

func searchResults(complete: (names: [String]) -> ()){
let aVar = [String]()
//your code
for elem in apiSearchXML["rss"]["channel"]["item"]{

aVar.append(elem["name"].element!.text!)
}
complete(names: aVar)
//your code
}