无法在关闭Swift 3之外访问阵列

时间:2017-08-04 06:59:14

标签: arrays swift xcode facebook

我有这个闭包,我用来填充我的数组和字典。但是,当我尝试在函数外部使用它时,它是空的。这是我的代码:

var pages: [FBPages] = []

override func viewDidLoad() {
    super.viewDidLoad()

    Facebook.getUserInfo(greetingLabel: greetingLabel, profileImage: profilePic)

    pages = []

    let params = ["fields": "about,name,created_time,picture", "limit": "3"]
    Facebook.getUserPagesLikes(params: params, handler: { (userData) in

        guard let pagesArrays = userData["data"] as? Array<Any> else {return}

        for dict in pagesArrays {

            let fbPages = FBPages()
            let pagesData = dict as! NSDictionary
            fbPages.about = pagesData["about"] as! String
            fbPages.name = pagesData["name"] as! String
            self.pages.append(fbPages)

        }


        print("pages array: \(pagesArrays)")
        print("pages : \(self.pages.count)")



    }) { (error) in
        print("cannot get FB pages: \(String(describing: error))")
    }




    //I got 0 here
    print("fb array: \(pages.count)")

}

我试图在闭包之外打印数组计数,但结果只得到0。我怎么解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要了解打印阵列的时间。它还没有。 getUserPagesLikes是异步调用。这是一个完成处理程序。一旦响应返回,您将在阵列中拥有值。

您可以理解序列,就像您要求getUserPagesLikes为您提取用户喜欢的那样,并且您不会在那里等待用户喜欢。你继续前进,完成块后你写的任何代码都会被调用。在你的情况下,这是打印阵列。

一旦getUserPagesLikes为您获取数据,就会调用其完成块。此时您将分配数组值。数组中的值仅在此之后可用。因此,如果要在表视图中重新加载数据,请在完成处理程序中执行此操作。还要确保在主线程上执行此操作。

有关完成处理程序及其调用顺序的详细信息,您可以查看here