2016-07-06 3 views
1

Я хотел бы использовать метод, который возвращает результат асинхронно с использованием шаблона делегирования в закрытии.Swift: метод закрытия вызова в другой функции

Можно ли связать полный блок с другой функцией внутри одного класса?

class A { 

    func performASyncTask(input:String, complete:(result:String) -> Void) { 

     let obj = Loader() 
     obj.delegate = self 
     obj.start() 
     // Loader() returns loaderCompleteWithResult(result:String) when completed 
    } 

    func loaderCompleteWithResult(result:String){ 

     // Call complete function in performASyncTask .e.g 

     complete(result); // Calls the complete function in performASyncTask 
    } 
} 
+0

Это немного сложно понять, не могли бы вы уточнить? – Alexander

+0

Сохранить закрыть как собственность в классе – dan

+0

@AMomchilov, что конкретно вы не понимаете? – xoogler

ответ

0

Я действительно не понимаю, чего вы хотите достичь. Но вы можете объявить свойство функции и использовать его позже:

class A { 
    var closureSaver: ((result:String) -> Void)? 

    func performASyncTask(input:String, complete:(result:String) -> Void) { 
     let obj = Loader() 
     obj.delegate = self 
     obj.start() 

     closureSaver = complete 
     complete(result: "a") 
    } 

    func loaderCompleteWithResult(result:String){ 
     closureSaver?(result:result) 
    } 
} 
+0

Переменные имена не должны быть глаголами или глагольными фразами, они должны быть существительными – Alexander