Intereting Posts

Невозможно добавить глобальную переменную в локальную функцию swift

Это мой класс View Controller

import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var contact_Table: UITableView! var contacts : [Contact] = [Contact]() var conj : [Contact] = [Contact]() override func viewDidLoad() { super.viewDidLoad() self.populate() // Do any additional setup after loading the view, typically from a nib. } func populate() { let urlstring = "https://api.myjson.com/bins/25976" let url = NSURL(string : urlstring) let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { (data,response, error) -> Void in dispatch_async(dispatch_get_main_queue(), { var jsonerror : NSError? let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &jsonerror) as! NSDictionary if let list_of_doctors = json["doctors"] as? NSArray{ let no_of_contacts = list_of_doctors.count-1 for index in 0...no_of_contacts { if let single_contact = list_of_doctors[index] as? NSDictionary{ let first_name = single_contact["first_name"] as? String let last_name=single_contact["last_name"] as? Strin let password = single_contact["password"] as? String var contactjson = Contact(online: "online_green_dot.jpeg", type: "iamge_nurse.png", name: first_name!, workplace_image: "hospital.png", designation: password!, workplace: last_name!) contacts.append(contactjson) } } } }) } task.resume() 

Даже если контакты являются локальной переменной, я не могу добавить данные, используя contacts.append () Он просит меня использовать self.contacts.append ()

Компилятор заставляет вас явно называть self потому что self сильно фиксируется в закрытии (неявно с помощью contacts ). Таким образом, вы можете ясно видеть, что этот вызов является неявной ссылкой на self . Это также подразумевает, что вы должны подумать о том, чтобы сделать self weak или unowned в списке захвата:

 // replace weak with unowned if self is always there/ not nil let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { [weak self] (data,response, error) -> Void in dispatch_async(dispatch_get_main_queue(), { 

Обратите внимание, что массив обновляется асинхронно после 0,85 секунды (по крайней мере для меня). Таким образом, вы должны сделать свой код обновления (для представления таблицы) в закрытии, чтобы убедиться, что массив contacts обновлен.