Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Writing closures Написание закрытия

Creating and using arrays | Creating and using arrays Создание и использование массивов | Using dictionaries | Using dictionaries Использование словарей | Understanding tuples | Understanding tuples Понимание кортежи | Creating optional variables | Creating optional variables Создание дополнительных переменных | Defining and using enumerations | Defining and using enumerations |


Читайте также:
  1. English phonemes in writing
  2. II. Writing
  3. Writing
  4. Writing
  5. WRITING
  6. Writing
  7. Writing

 

- В Свифт, мы используем закрытия в групповых кодов вместе в многоразовых автономных единиц. Теперь вы можете сначала услышать, что описание, а затем думать, "подожди, не является", что мы делаем с функцией "?" В конце концов, функциональные группы некоторый код "в многоразовой автономное устройство." И да, абсолютно, на самом деле функции специализированный тип закрытия.Функция способ группы некоторый код вместе и дать ему имя. Но закрытие даже не нужно имя. Это на самом деле проще, чем функции. И другие языки поддерживают эту концепцию и называют эту идею анонимную функцию.

Некоторые другие языки называют это лямбда или в Objective-C это называется блок. Это способ быть в состоянии группе некоторый код вместе, чтобы мы могли передать его из одного места в другое место в нашем приложении. И великое дело, вы уже знаете, как начать с этого. Если вы можете написать простую функцию, вы можете написать замыкание. Вот что я имею в виду, мы уже знаем, как создать простую функцию, так вот функция, которая не принимает никаких параметров и не возвращает значения, он просто не выполняет Println заявление.

Теперь, если бы я просто идти вперед и удалить ключевое слово "Func" и имя функции, это будет о простом закрытии в мире. Сказав, что написано само по себе, это может вызвать Swift вызовет ошибку. Это будет сказать, что это приготовился блок операторов, что это не используется закрытие. Это в основном говорят, "да, вы" группировки код вместе, вы "писать этот код блок, но вы не" делать что-либо с ним, и вы не можете сделать "что-нибудь с этим прямо сейчас, так чтосмысл? "Потому что так же, как точки написав функцию так можно назвать эту функцию, используя имя функции, смысл писать замыкание, что у вас есть блок кода, который вы собираетесь пройти вокруг и использовать.

Теперь в одну сторону, и не очень полезный способ, но так я мог получить готовы сделать это, чтобы пройти этот закрытие вокруг я мог бы просто сохранить его в переменной или константе, просто дать ему имя. Таким образом, "пусть myClosure" или "Var myClosure равных" и дать ему блок кода. Это будет давать это замыкание имя существующего как им части данных, как блоком кода. Это, вероятно, кажется, не значительно сэкономить над иметь функцию, но медведь со мной, мы берем это шаг за шагом. Так, у меня есть это замыкание, чтобы найти и дать ему имя.

Теперь я создам функцию, которая принимает замыкание в качестве параметра, и это действительно весь смысл использования замыкания, что мы можем создать эти блоки кода и передавать их вокруг в других частях нашей программы. Так что это обычная функция, мы просто с помощью ключевого слова "Func", я назвал его "performFiveTimes" и он принимает один параметр, который я назвал "myClosureParameter." Теперь единственное, что должно выглядеть немного странно прямо сейчас большинство наших параметров до этого момента были с помощью Int толстой кишки или толстой кишки строку или толстой кишки Буль.

Ну это своего "толстой кишки пустые скобки" возвращение стрелки пустые скобки. "Ну, мы будем говорить о таком формате всего за секунду, но это, как я говорю, что эта функция принимает замыкание в качестве параметра, а не INT, а нестрока, а не что-то простое, но блок кода. Таким образом, в функции у меня есть простой цикл, который просто идет вокруг пять раз и каждый раз, это будет принимать все прений, независимо блок кода, который был принят в и выполнить это. Ну, точка определения функции том, что мы собираемся называть его, так что я могу идти вперед и вызывать эту функцию передается имя этого закрытия, что я назвал здесь, на третьей линии под названием "myClosure", и это будет передать его в функцию, она будет петля вокруг пяти раз, называя, что каждый раз.

Вы можете увидеть результат его здесь, что да он будет идти до конца, это даст нам консольный вывод и пишут, что пять раз. Так вот последнее, что я могу забыть об этом дополнительном этапе фактически назвав это закрытие. Мы можем избавиться от этого, мы можем захватить само замыкание, которое открытие и закрытие фигурная скобка и любой код между ними, является ли это одно заявление, как это здесь, три или десять или 100, если это необходимо. И я просто хочу, чтобы приехать сюда по вызову функции и вставьте этот всю вещь прямо внутри скобок как блока кода.

И это обычный способ, что вы будете взаимодействовать с ними, если функция определена, чтобы принять замыкание, принять блок кода, вы просто напрямую введите фигурные скобки внутри вызова этой функции и вставить в содержание код, который вы хотели бы передать в функцию. Это работает точно так же, как мы видим, здесь он выполняется пять раз, мы видим результаты этого выходит пять раз. Но, есть ещё парочка вещей, стоит знать об этом формате. Смотрите, как функция блок кода, который может принимать параметры в качестве входных данных и возвращать значения на выходе.

Так может закрытие, закрытие может иметь параметры и возвращать значения. Итак, давайте сравним их работать, потому что это, вероятно, наиболее полезным сравнение здесь. Так что я получил простую функцию, не определенный предпринимать никаких параметров, он получил пустые скобки после имени функции. И мы можем предположить, что это не возвращает значения, потому что мы не указали, нет возврата стрелки, нет возврата стрелки строка или вернуться стрелкой Int. Если бы я хотел быть очень четко, что эта функция не возвращает ничего, я могу в Swift на самом деле писать этот код, я мог бы написать это так.

Пустые скобки для входных параметров и пустых скобках после возвращения стрелки. И это формат, который мы используем, когда мы определяем параметры и тип возвращаемого значения для закрытия. Так что, если мы начнем с простого закрытия, наиболее простой блок кода в мире, просто закрытия, которая не принимает никаких параметров и не возвращает значений, если мы хотим быть открытыми об этом, мы бы тот же формат и вставьте его в отверстие фигурная скобка. Потому что в то время как с определением функции, мы ставим параметры и вернуться в информации о типе перед открывающей фигурной скобкой, когда мы работаем с закрытием, нет ничего перед открывающей фигурной скобкой.

Закрытие начинается в открывающей фигурной скобкой, поэтому мы поместили эту информацию внутри. Так что это закрытие, которые явно не принимает никаких параметров и не возвращает никаких значений. Он просто делает немного работы. Теперь один последний кусок официального синтаксиса затем отделить параметр и возвращает информацию типа от остальной части заявления к закрытию, мы используем ключевое слово "в", чтобы разделить две части. Хорошо, вернемся к коду. Таким образом, чтобы вернуться к этому определение функции, это то, что означает, что синтаксис, это, как мы определяем тип для функции, которая принимает замыкание в качестве параметра и явно замыкание, не принимает никаких параметров и не возвращает никаких значений, он просто выполняет некоторые действия,

Так что, если я прохожу в любом закрытия соответствие этому определению, он будет делать эту работу пять раз. Тем не менее, я должен на самом деле для лучшей практики быть явным сюда, когда я передаю в этом закрытия и сказать: "да", это закрытие, который не принимает "параметры, не возвращает никаких значений" Это та часть информации здесь ". а потом я хотел бы использовать ключевое слово "в", чтобы отделить параметр и возвращает информацию от фактических блоков кода из кода в остальной части нашей закрытия. и это не меняет того, что он делал минуту назад, но этоболее формальный синтаксис для этого, и это то, что стоит в состоянии признать.

Так возникает вопрос, если у нас есть закрытие, которые могут принимать параметры и может иметь возвращаемых типов, как они работают, как мы используем их? Ну, чтобы показать, что, позвольте мне работать через примера использования замыкание с какой-то существующей функциональности, которая уже у Свифта и действительно, это большая выгода от использования замыкания, именно они позволяют задействовать огромное количество существующей функциональности. Таким образом, я просто хочу, чтобы создать новую спортивную площадку. Я могу лишить весь код из этого, как я действительно не нужно это прямо сейчас. И то, что мы собираемся сделать, это использовать часть функциональности, которая уже существует, это функция, называемая "сортируются". И есть несколько способов это можно назвать, но один из основных способов является назовите его "сортировать", проходящей на две части информации.

Массив или другая коллекция, что вы хотите отсортировать, а затем немного информации, закрытие, немного кода, немного логики, говорит, как любые два элемента в этом массиве или в этой коллекции должны быть сопоставлены. Вы видите, это встроенный в отсортированном функция может заботиться о сортировке массивов тысяч элементов, вы не должны написать сам алгоритм сортировки до тех пор, как вы можете предоставить немного кода, немного логики, просто говорит: "как вы сравнить любые два куска?" Итак, сначала мы создаем массив.

Теперь, ради Время, я буду только с помощью целых чисел. Скорее в этом случае, это будет массив какой-то пользовательский объект. Таким образом, это отсортированный функции хочет быть снабжен закрытия, которая будет принимать два параметра. Теперь для нас, что будет два целых числа из массива для сравнения. И он рассчитывает получить обратно Буля. Как я знаю это? Ну, я посмотрел на документацию для отсортированного функции. Таким образом, мне нужно замыкание, которое принимает два целых числа и возвращает либо "истинно", если первый меньше, чем второй, или "ложь" в противном случае. Теперь, если вам кажется, трудно думать: "Ну, как" вы начинаете писать, что в закрытии? "Ну, простой способ сделать это сначала написать, что в регулярной функции, а затем изменить его закрытия, потому что это гораздо проще.

Таким образом, если мы идем вперед и написать, что в регулярной функции, я бы назвал это "compareTwo", и это занимает два параметра, они оба целые числа, я буду называть их первый и второй, и возвращает Буль. Я сделал опечатку там, я сказал функцию вместо FUNC. Давайте избавимся от этого. и я использую сокращенную метод здесь, что это просто будет непосредственно возвращать логическое сравнение между двумя, так что если первый меньше, чем второй, мы вернем правда. Если что-нибудь, кроме того, мы собираемся вернуться ложным. Таким образом, очень просто кусок кода здесь, но это должны делать свое дело.

Мы будем преобразовать это из функции в оболочке всего за секунду. Теперь ниже этого, мы собираемся, чтобы иметь вызов встроенного в отсортированном функции, и это только доступно в любой точке Свифт. отсортированный вернет отсортированный версию вашей коллекции, отсортированного версии массива или словаря, так что я буду создавать новую постоянную для получения результатов в, и мы перезвоним отсортированы. Первая часть информации, чтобы пройти в наш несортированный массив, который я создал на линии пять. Тогда запятая и затем мы должны закрыть.

Итак, я собираюсь превратить эту функцию в оболочке. Первое, что я собираюсь сделать, это просто, на самом деле, это прокомментировать, потому что я не хочу Свифт жаловаться на него со всем, что я делаю здесь. Итак, как мы это делаем? Ну, сначала я избавиться от FUNC и имя функции, не нужно. Затем, фигурные скобки нужно двигаться право начале, потому что закрытие открывает в фигурные скобки. Таким образом, мы имеем открывающую фигурную скобку, у нас есть информация от параметра и информацию возвращаемого типа. Тогда у нас есть тело закрытия.Только в прошлом, что мне нужно сделать, это отдельный, что с словом здесь.

И это должно работать, как наш закрытия. И мы просто раскомментировать, что мы, конечно, не нужно его сам по себе. Мне нужно, чтобы сократить его, вставьте его после этого и убедитесь, что для завершения закрытия скобки для отсортированного вызова. И, похоже, это нужно делать какой-то из 37 сравнений в его сравнивает, это, вероятно, делать какие-то пузырьковой сортировки, это действительно не имеет значения, я не волнует, что много. То, что я заинтересованы в том, результатом, так что я собираюсь ввести имя массиве сюда, а потом просто перейти по ней и найти значок Быстрый просмотр, и мы видим, что да, мы начали с случайным несортированный массива и теперь это один, два, три, четыре, 23, 98, она выглядит идеально, она выглядит в нужном количестве и с правой структуры.

И в самом деле, это всего лишь очень небольшой пример в пользу знакомство с замыканий. Затем, когда вы понимаете, как их использовать, вы можете подключиться к огромным количеством функциональных возможностей всей рамках Apple. Не только с сортировкой, но с сетевого кода и параллелизма и анимации, есть много частей функциональности, которые были определены для вас обеспечить только немного дополнительной логики и вы, что, предоставляя замыкания. Все они ожидают знакомство с этой идеей, и ваша жизнь намного проще, когда у вас есть, что.

 

 


Дата добавления: 2015-08-20; просмотров: 83 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Writing closures| Defining and instantiating classes

mybiblioteka.su - 2015-2024 год. (0.014 сек.)