В прошлый день, когда я выполнял вызовы api с помощью almofire, я наткнулся на странный вызов метода, который был чем-то вроде создания объекта almofire с последующим вызовом метода с созданным объектом, за которым следовал другой метод после точки (.) , затем еще один метод и так далее ...

Вызов API, о котором я говорил, выглядит примерно так:

Здесь мы вызываем метод request в классе Almofire. Затем следует метод validate(statusCode:), затем другой метод validate(contentType:). Затем, наконец, мы можем увидеть метод с именем responseData с trailing closure, который возвращает результат вызова api.

Как это работает?? Что ж, логика довольно проста.

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

Мы добавим новую функцию, которая что-то сделает, а затем вернем self. Это так просто.

Давайте проясним. у нас обычно есть init метод для инициализации объекта класса. У нас может быть несколько designated, а также convenience инициализаторов, чтобы упростить нашу работу. У нас могут быть пользовательские параметры для инициализации объекта класса. Рассмотрим класс с именем Celcius.

class Celsius {
var temperatureInCelsius: Double
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit — 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin — 273.15
}
func printTemperature() {
print(“Temperature is \(temperatureInCelsius)”)
}
}

У нас есть два метода инициализации: один принимает температуру в kelvin, другой в fahrenheit. Следующий синтаксис создает объект класса Celcius, и, используя этот объект, мы можем вызвать метод экземпляра.

Celsius(fromKelvin: 400).printTemperature() 
// prints Temperature is 126.85

Если вы знаете, как работает приведенный выше код, то понимание цепочки методов almofire, упомянутых в начале статьи, легко понять.

Пример методов цепочки:

Давайте создадим APICaller класс.

Вызов api обычно имеет url, http method и parameters. Если мы воспользуемся указанным выше классом для вызова API, он будет выглядеть примерно так.

let params = [“key1”:”value1",”key2":”value2"]
APICaller().urlString(“www.google.com").method(.post).parameters(params).response { (resultDict) in
print(resultDict[“result”]!)
}
//----------------
// prints the following in console.
(
"Result values1",
"Result values2",
"Result values3",
"Result values4"
)

Давайте разберемся с вышеупомянутым призывом.

  1. Создайте экземпляр класса APICaller.
  2. Вызов метода urlString со строкой в ​​качестве параметра. Это установит свойство url в классе APICaller и вернет self.
  3. Вызвать method метод, который устанавливает свойство method класса APICaller, и возвращает self.
  4. Вызвать parameters метод, который устанавливает параметры для вызова API и возвращает self.
  5. Наконец, вызовите метод response, который имеет завершающее закрытие в качестве параметра. Здесь выполните вызов API и в случае успеха или неудачи вызовите закрытие обратного вызова с объектом результата. Здесь замыкание принимает только словарь типа Dictionary<String,AnyObject>.

Надеюсь, все ясно. Либо мы можем иметь один метод инициализации со всеми этими параметрами и вызывать метод, который, в свою очередь, вызывает api и возвращает ответ. Но здесь самое большое преимущество состоит в том, что нам нужно вызывать любой метод цепочки только тогда, когда это необходимо. Если мы выполняем вызов метода get, мы можем пропустить вызов метода method, поскольку get указывается в качестве метода по умолчанию внутри кода. Также, если параметры не требуются, мы можем их пропустить.

Наша цель - писать меньше кода, который имеет больше смысла !!!

Наслаждаться!!

Если вам понравилось читать этот пост, поделитесь им и порекомендуйте его, чтобы другие могли его найти 💚💚💚💚💚💚 !!!!