2015-11-08 4 views
3

Я хочу, чтобы очистить о вложенных замыканиях в Swift 2,1Вложенных Затворы в Swift 2.1

Здесь я объявляю вложенное замыкание,

typealias nestedDownload = (FirstItem: String!)-> (SencondItem: String!)->Void 

Затем я использую это nestedDownload замыкание в качестве параметра из следующих и попытайтесь выполнить значение параметра compliletion в функции, например, как

func nestedDownloadCheck(compliletion:nestedDownload){ 

     compliletion(FirstItem: "firstItem") 
} 

Но это говорит о том, что ошибка, «Expression решает неиспользуемую функцию»

Кроме того, когда я звоню nestedDownloadCheck() от ViewDidLoad() метода, Тринга, чтобы заполнить тело компиляции

self.nestedDownloadCheck { (FirstString) -> (SecondString: String!) -> Void in 
      func OptionalFunction(var string:String)->Void{ 


      } 
      return OptionalFunction("response") 
     } 

Это говорит об ошибке компиляции "Невозможно преобразовать return a типа 'Void' (aka '()') для возврата Type '(SecondString: String!) -> Void' "

Я не могу узнать, как я точно использую вложенное закрытие таким образом ,

ответ

2

Вы должны вернуть действительный OptionalFunction, а не ссылаться на него "response" и вернуть это значение. И вы должны использовать String! в определении:

nestedDownloadCheck { (FirstString) -> (SecondString: String!) -> Void in 
    func OptionalFunction(inputString:String!) -> Void { 

    } 
    return OptionalFunction 
} 

Обратите внимание, что функции должны начинаться с прописной буквы: optionalFunction.

Что делает ваш код является

  • определить функцию с именем OptionalFunction
  • вызова, который функционирует с "response" в качестве параметра
  • возвращает значение, возвращаемое этот вызов (Void)

Поэтому компилятор правильно сообщает вам, чтонеявляется не конвертируемой ожидаемой стоимости возвращаемого (SecondString: String!) -> Void

То, что вы наконец-то не хватает, чтобы вызвать фактическое возвращенное функцию следующим образом:

func nestedDownloadCheck(compliletion:nestedDownload){ 
    compliletion(FirstItem: "firstItem")(SencondItem: "secondItem") 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^