Ios 使用NSURL的结果填充UIView

Ios 使用NSURL的结果填充UIView,ios,swift,xcode,uikit,closures,Ios,Swift,Xcode,Uikit,Closures,我使用的API返回被解析为字符串的JSON。然后,我想将此字符串用作另一个视图控制器上的标签。我尝试使用完成块,但无法使其工作,它不断返回“致命错误:预期可选返回零”,但我不知道在哪里。我假设它与异步调用有关,不允许popup类填充API尚未返回的字符串 func summarizeArticle(finished: () -> Void) { let formatText = (searchText.text?.replacingOccurrences(of: " ",

我使用的API返回被解析为字符串的JSON。然后,我想将此字符串用作另一个视图控制器上的标签。我尝试使用完成块,但无法使其工作,它不断返回“致命错误:预期可选返回零”,但我不知道在哪里。我假设它与异步调用有关,不允许popup类填充API尚未返回的字符串

    func summarizeArticle(finished: () -> Void) {
    let formatText = (searchText.text?.replacingOccurrences(of: " ", with: "_"))!
    articleNameFormatted = ("https://en.wikipedia.org/wiki/" + formatText)
    let request : NSMutableURLRequest = NSMutableURLRequest()
    request.url = NSURL(string: urlString + articleNameFormatted) as URL!
    request.httpMethod = "POST"
    let url = request.url
    URLSession.shared.dataTask(with:url!) { (data, response, error) in
        if error != nil {
            print(error!)
        } else {
            do {
                let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
                articleSummary = parsedData["sm_api_content"] as! String
                print(articleSummary)
            } catch let error as NSError {
                print(error)
            }
        }
        }.resume()
    finished()
}


@IBAction func summarizeButtonPressed(_ sender: Any) {
    self.view.endEditing(true)
    summarizeArticle{
        let popupVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbPopupVC") as! PopupViewController
        popupVC.view.frame = self.view.frame
        self.addChildViewController(popupVC)
        self.view.addSubview(popupVC.view)
        popupVC.didMove(toParentViewController: self)
    }
}
然后,第二个视图控制器使用该函数,该函数用于从前面函数设置的全局变量中获取文本:

    override func viewDidLoad() {
    super.viewDidLoad()
    popupView.layer.cornerRadius = 10.0
    popupView.clipsToBounds = true

    summaryText.text = articleSummary

    view.backgroundColor = UIColor.black.withAlphaComponent(0.0)
    self.showAnimation()
}

不要将
article summary
设置为全局变量,请尝试以下操作:

1) 将
article summary
设置为您的
summaryArticle()
函数的本地

2) 在标识符为
“sbPopupVC”
的视图控制器的类定义中,添加一个名为
articleSummaryText
的实例变量

3) 去掉
summaryArticle()
上的完成处理程序,并将其中的所有代码移动到
URLSession
API调用的完成块中

4) 在该完成块中,在self.addChildViewController(popupVC)前面添加以下行:
popupVC.articleSummaryText=articleSummary


5) 最后,在您的POPVC的
viewdiload()
中,设置
summaryText.text=articleSummaryText
“但我无法让它工作。”您告诉我们它应该做什么,但您尝试了什么,什么不起作用?你会遇到什么错误?“但我不知道在哪里”然后调试!放置断点和步骤直到崩溃。使用可选绑定以避免类似问题