Я использую API, который возвращает JSON, который анализируется в String. Я хочу использовать эту строку как метку на другом контроллере. Я пробовал использовать блоки завершения, но я не могу заставить его работать, он постоянно возвращает «Неустранимая ошибка: ожидаемый дополнительный возвращенный нуль», но я не могу понять, где. Я предполагаю, что это имеет какое-то отношение к асинхронным вызовам, не позволяющим всплывающему классу заполнять String, который API еще не вернул.Заполнение UIView с результатами NSURL
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()
}
«но я не могу заставить его работать». Вы говорите нам, что он должен делать, но что вы пытались И что ** не работает **? что * Ошибки * вы сталкиваетесь? –
«но я не могу понять, где», а затем отлаживать! Поместите контрольные точки и сделайте шаг, пока вы не потерпите крах. – matt
Используйте необязательное связывание, чтобы избежать таких проблем – KrishnaCA