Я новичок в быстром, так что медведь со мной. Я использую NSURLSession, и мне нужно получить доступ к делегату, который я определил, когда ответ завершен.Swift NSURLSession делегат в закрытии
Это мой класс свойство
var delegate: APIClientDelegate?
Вот соответствующий раздел
var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
var session = NSURLSession(configuration: configuration, delegate: self, delegateQueue:NSOperationQueue.mainQueue())
var task = session.dataTaskWithRequest(request){
(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if error == nil {
var result = NSString(data: data, encoding: NSASCIIStringEncoding)!
NSLog("request to %@ result %@", request.URLString, result)
if let delegate = self.delegate{
delegate.requestDidSucceed(data)
} else {
println("nope")
}
}
}
task.resume()
Это все работает нормально, но я не могу получить доступ к своему Делегат делегат. Я что-то пропустил здесь? Я давно искал поисковые запросы, но проблема в том, что я не знаю, что я не знаю:/
Благодарим за помощь.
EDIT ОБЪЯСНЕНИЕ: Вопрос заключается в том, что в этом контексте делегата был равен нулю. Это произошло потому, что я не понимал, что класс, который придерживается протокола, должен установить делегат сам. Здесь и делается ссылка на предполагаемую реализацию протокола, и я этого не понимаю.
Таким образом, в классе, который реализует протокол:
var apiClient: APIClient = APIClient()
apiClient.delegate = self
Извините, что фрагмент немного старый, я его обновил, но он в основном такой же. Возвращаясь назад, я вижу вашу точку зрения, но почему тогда это работает: https://github.com/tutsplus/SwiftFromScratch-ToDo-2/blob/master/ToDo/AddItemViewController.swift – lampwins
Экземпляр AddItemViewController создается где-то, скорее всего, где он также создает свое свойство делегирования. Я рекомендую: создать экземпляр класса в делегате (например, в viewDidLoad). После того, как вы создали свой экземпляр, установите его свойство для себя: var instance = MyCoolClass() instance.delegate = self –
См. Здесь: https://github.com/tutsplus/SwiftFromScratch-ToDo-2/blob/master/ ToDo/ViewController.swift в методе prepareForSegue –