При непосредственном назначении / реализации замыкания Swift нет проблем с доступом к свойствам класса. Но когда я пытаюсь определить замыкание как свойство класса ie, доступ к другим свойствам класса невозможен. Почему это так?
Вот пример:
Хотя замыкание, непосредственно назначенное editorVC.completionBlock
, может получить доступ к свойству класса tableView
без проблем, тот же код внутри приводит к ошибке, когда замыкание определяется как свойство класса editorCompletionBlock
:
class MyViewController: UIViewController {
@IBOutlet var tableView: UITableView!
func showEditor(withData: String) {
let editorVC = EditorViewController()
// Directly assign closure - Works without any problem
editorVC.completionBlock = { (result) in
self.tableView.reloadData()
doSomething(withResult: result)
// ...
}
present(editorVC, animated: true, completion: nil)
}
// Define closure as class property ==> Error
let editorCompletionBlock: EditorCompletionBlock = { (resut) in
// ERROR: Value of type '(MyViewController) -> () -> MyViewController' has no member 'tableView'
self.tableView.reloadData()
doSomething(withResult: result)
// ...
}
}
typealias EditorCompletionBlock = (String) -> Void
class EditorViewController: UIViewController {
var completionBlock: EditorCompletionBlock?
func closeEditor(withResult result: String) {
completionBlock?(result)
}
}