/ / Вкладена функція в swift 3 - swift, методи, синтаксис, swift3, alamofire

Вкладена функція у швидкому режимі 3 - швидкі, методи, синтаксис, swift3, alamofire

Я перевіряв документацію Alamofire і знайшов код нижче

 Alamofire.request("https://httpbin.org/get").responseJSON { response in
debugPrint(response)

if let json = response.result.value {
print("JSON: (json)")
}
}

Здається, що функція написана так

Class.Function().Function{
}

Чи називається це вкладеною функцією? Якщо так, як би я створив просту вкладену функцію, щоб знати синтаксис

Відповіді:

0 для відповіді № 1

це не вкладена функція, а ланцюжок функцій.

class Alamofire {
static func request(_ url: String)->Request {
//... code ...
return aRequest
}
}

class Request {
func responseJson(completion: (response: Response)->()) {
//code
}
}

Так що це відбувається. Функція запиту Alamofire повертає об'єкт Request, який має функцію responseJson, яка приймає закриття як параметр.

У swift, якщо параметр закриття є останнім, виклик функції може бути синтезований шляхом видалення імені параметра і визначення закриття як функції так

Alamofire.request("whatever").responseJson(completion: { (response) in
//whatever
})

точно так само, як і робити

Alamofire.request("whatever").responseJson(){ (response) in
//whatever
}

Це закриття. Ви можете знайти більше інформації про нього тут у пункті "Закриття".

Сподіваюся, це допомагає


0 для відповіді № 2

Його Метод ланцюжка останній - синтаксис кінцевих закриттів.

Закриття є автономними блоками функціональності, які можна передавати у вашому коді.

    func someFunctionThatTakesAClosure(closure: () -> Void) {
// function body goes here
}

// Here"s how you call this function without using a trailing closure:

someFunctionThatTakesAClosure(closure: {
// closure"s body goes here
})

// Here"s how you call this function with a trailing closure instead:

someFunctionThatTakesAClosure() {
// trailing closure"s body goes here
}

Докладнішу інформацію про закриття читайте це