Swift система – Как работает система SWIFT — система межбанковских денежных переводов

Содержание

зачем банкам глобальная платежная инновация

19.10.2018 11:35

ИРИНА ЛИТОВЧЕНКО,

Head of Sales SWIFT&Service Bureau Division of ProFIX Company

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

swift.com

SWIFT gpi коренным образом меняет ситуацию и позволяет банкам-участникам SWIFT gpi получить информацию обо всей цепочке, обеспечивая отслеживание платежей в режиме реального времени. Это значит, что при отправке банк заранее знает, как его платеж будет отработан банками-партнерами по gpi. SWIFT gpi – это стандартизация процессов обработки банковских платежей на глобальном уровне.

В условиях стремительного развития технологий современного быстро меняющегося мира это особенно важно, так как все ожидают максимальной прозрачности процессов, в том числе при отправке и получении средств через SWIFT. Доступ к открытым данным, прозрачность и возможность быстрого реагирования и управления процессами – бесспорные преимущества SWIFT gpi.

В чем преимущества для банков и клиентов?

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

Преимущества SWIFT gpi

(кликните, чтобы увеличить изображение)

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

Вопрос цены SWIFT gpi

Себестоимость самого SWIFT-сообщения для банка-пользователя не меняется. SWIFT не регулирует стоимость платежей для конечных пользователей, а банки самостоятельно устанавливают тарифы на предоставляемые услуги.

SWIFT gpi объединяет по всему миру банки, которые хотят предложить своим клиентам инновационный опыт трансграничных платежей и эффективно выстроить свою корпоративную клиентскую базу. Поэтому gpi-пользователи вкладывают средства и усилия во внедрение технологии SWIFT gpi и ее поддержку в банке. Кроме того, gpi-банки должны адаптировать свои внутренние процессы, чтобы соответствовать требованиям SWIFT gpi. В то же время, новая технология позволяет gpi-банкам сократить свои операционные расходы на обработку платежей (затраты на запросы банкам-корреспондентам и расследования снижаются в среднем на 50%), оптимизировать управление ликвидностью собственных средств и своих клиентов, а также понизить операционные риски и риски, связанные с ликвидностью.

Количество банков и транзакций по GPI

Количество банков-участников SWIFT gpi неуклонно растет. Сейчас к этой услуге присоединилось более 180 банков, способных использовать 450+ международных платежных коридоров, обмениваясь более 500 тыс gpi-платежей в день, а это сотни миллиардов долларов США ежедневно. SWIFT подходит к рубежу 40 миллионов платежей, отправленных на платформе SWIFT gpi. К ноябрю 2018 года эта цифра вырастет в несколько раз. Экспоненциальный рост gpi-трафика ожидается в связи с выходом около 100 новых банков в живой режим работы в SWIFT gpi, которые в данный момент находятся на стадии тестирования. Каждый день к SWIFT gpi присоединяются новые банки и открываются новые платёжные коридоры. Это невероятно масштабируемая технология.

SWIFT gpi в цифрах

(кликните, чтобы увеличить изображение)

От отправителя к получателю: как работает GPI

Отправляя gpi-платеж, банк назначает уникальный код для транзакции. Этот код все банки-участники цепочки платежа передают неизменным. Таким образом, все вовлеченные стороны могут проконтролировать конкретный платеж в любой момент. С ноября этого года необходимость принимать уникальный код транзакции сообщений 1 и 2 категорий становится обязательной для всех пользователей SWIFT. Следовательно, все gpi-сообщения становятся прозрачными и возможными для отслеживания пользователям gpi, вне зависимости от того, проходит ли платеж по gpi-активным банкам или нет.

Мгновенная проверка статуса отправленных, полученных и находящихся в обработке платежей доступна благодаря сервису SWIFT Tracker, разработанному на основе облачных технологий.

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

Также с помощью настройки фильтров SWIFT Tracker-а gpi-банки могут отслеживать входящие gpi-платежи, которые находятся в процессе поступления в банк.
Чтобы банки-участники SWIFTgpi могли чётко понимать схемы обработки gpi-платежей друг друга и своевременно обрабатывать gpi-платежи, между ними заключается мультиколлатеральное соглашение (SLA). Выполнение таких SLA банки могут отслеживать через аналитический инструмент gpi Observer.
Также банки-участники имеют доступ к справочнику gpi Directory, который помогает gpi-банкам выстроить наиболее эффективную цепочку платежа, исходя из присутствия gpi-банков в стране, валют, в которых они работают по SWIFTgpi, и их cut-off times (закрытие операционного времени).

Прозрачность платежей

Сама система увеличивает прозрачность платежей. Видимость всей цепочки осложняет редактирование платёжной инструкции на пути прохождения транзакции. Становится невозможным изменить данные по оригинатору и бенефициару, так как эти данные доступные с самого начала цепочки. Поэтому банки-корреспонденты, особенно в определенных регионах с высокой степенью риска, активно настаивают внедрять SWIFT gpi именно с точки зрения их комплаенс-рисков. Такая прозрачность процессов усложняет существующие практики отмывания денег. Кроме того, SWIFT gpi сделает доступной отправку дополнительных запрашиваемых платёжных документов посредством SWIFT Tracker в режиме реального времени, что также положительно отразится на комплаенс-проверках при обработке платежей.

SWIFT gpi в Украине

С Украиной как с регионом SWIFT gpi SWIFT начал работать только в 2018 и наблюдает активный интерес к сервису со стороны банков. Особое внимание связано с зависимостью украинских банков от международных корреспондентов и высокими аппетитами де-рискинга в украинской банковской системе.
Мы прогнозируем, что конкуренция за клиентов, в первую очередь корпоративного сектора, в скором времени изменит эту картину. Кроме того, уже к 2020 году SWIFT планирует сделать gpi новым обязательным стандартом для всех международных платежей.

ВАС ЗАИНТЕРЕСУЕТ — SWIFT против Ripple: какая система лучше

Система SWIFT — ведущая мировая платежная система

Система SWIFTСистема SWIFT (СВИФТ) – межбанковская система для выполнения финансовых платежей с возможностью передачи финансовых информационных сообщений. Ее название – аббревиатура от англоязычного «Сообщество всемирных межбанковских финансовых коммуникаций».  Сегодня это – одна из ведущих мировых платежных систем.

Система SWIFT (СВИФТ)

Еще в прошлом столетии у ведущих мировых банков возникла задача создания платежной системы, гарантирующей максимальную безопасность финансовых транзакций. Имеющиеся на тот момент наработки позволили реализовать задуманное. Система SWIFT увидела мир в 1973 году. Тогда ее участниками стали более 200 банков из 15 различных стран.

Сегодня это – одна из ведущих платежных систем. В ней задействовано более 10 тыс. финансовых учреждений из 210 государств. Штаб-квартира находится в Брюсселе. Особенно это касается перевода крупных сумм. Комиссия здесь ниже, а деньги поступают на счет быстро. Максимальное время ожидания – одна неделя.

СВИФТ работает, в основном, с долларами США и с Евро. Для того чтобы воспользоваться услугами, открывать счет в банке нет необходимости – может быть использован транзитный счет одного из банков-участников. Для большинства транзакций установлена фиксированная ставка, минимальный размер которой 10 долларов. Поэтому использовать СВИФТ для перевода мелких сумм невыгодно отправителю.

Иногда банки-получатели снимают дополнительные комиссии за зачисление денег и (или) их выдачу наличными.

SWIFT в России

В России SWIFT представляет некоммерческая организация РОССВИФТ, она была образована в 1995 году. Первой российской организацией, подключившейся к системе  SWIFT, был Внешэкономбанк, было это в 1989 году. В 90-х годах прошлого века происходило постепенное подключение российских банков к СВИФТ. В настоящее время Россия занимает второе место по количеству пользователей, на первом месте — США.

Несмотря на это, денежные переводы через SWIFT непопулярны у россиян. Граждане страны предпочитают переводить деньги без открытия счета через такие системы, как Золотая корона, Contact, Western Union, Юнистрим. Связано это в первую очередь c  неосведомленностью населения о системе SWIFT.

Сбербанк предлагает перевести денежные средства наличными за границу тремя системами: Колибри, MoneyGram и посредством SWIFT. Вот сравнительная таблица тарифов этих систем.

Тарифы на международные переводы наличными в Сбербанке

Условия переводаКолибриMoneyGramСВИФТ
Максимальный срок исполнения для всех стран1 час10 минут2 дня
Тариф1% от суммы перевода,
но не менее 5$ + 1% с получателя
Фиксированная сумма,
в зависимости от суммы и страны.
1%
мин. 15$
макс. 200$
Казахстан 10$5$ + 0,1$
с получателя
2$15$
Казахстан 100$5$ + 1$
с получателя
2$15$
Украина 500$5$ + 5$
с получателя
8$15$
Белоруссия 1 000$10$ + 10$
с получателя
16$15$
США 5 000$переводы только в Белоруссию,
Украину, Казахстан
150$50$

Из таблицы наглядно видно, чем больше сумма перевода, тем выгоднее ее переводить через систему СВИФТ. При безналичном переводе в Сбербанке комиссия не меняется.

Денежные переводы SWIFT

Сделать денежный перевод через систему SWIFT может любое физическое лицо. При любом денежном переводе, согласно российскому законодательству, действует ограничение: резиденты могут отправлять из России в день, на счет частного лица не более 5 000$.

Если же перевод денег осуществляется на юридическое лицо, банк может попросить invoice (счет на оплату), в котором указано назначение платежа.

Как отправить

Отправить перевод можно с открытием счета или без открытия счета в банке, работающим с системой SWIFT. Если счет уже открыт и подключен к интернет-банкингу, переводы можно делать самостоятельно.

Переводы осуществляются на счет получателя или без зачисления на счет – выплата наличными.

Чтобы сделать перевод в банке, нужно представить паспорт и данные получателя:

  • Фамилию и имя (отчество, если есть) латинскими буквами;
  • Номер банковского счета получателя (20 цифр).

И данные банка-получателя:

  • название банка,
  • BIK (БИК) – 9 цифр
  • SWIFT/BIC (SWIFT-код банка) (8 или 11 символов).

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

Как получить

Перед тем, как получать перевод, удостоверьтесь, что средства на счет поступили. Можно воспользоваться услугами интернет-банкинга или перезвонить оператору. Получить перевод вы можете в банке, в котором у вас открыт счет, либо в любом другом, имеющем транзитный счет и являющимся участником системы. Естественно, следует взять паспорт.

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

Преимущества и недостатки системы

К преимуществам СВИФТ можно отнести ее масштабность, благодаря которой транзакцию можно выполнить из любого крупного мирового банка.

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

К сожалению, система SWIFT не идеальна и имеет некоторые недостатки. К таковым, с точки зрения клиента, можно отнести фиксированную ставку комиссии в большинстве случаев. Это делает СВИФТ невыгодным при переводе небольших сумм.

С точки зрения банков, главный недостаток СВИФТ – дорогое членство. Чтобы присоединится к этой системе, следует внести около 200 тыс. долларов, что часто неприемлемо для мелких и средних банков.

Удачных переводов!

Банковская система SWIFT

История банковской системы SWIFT


Система SWIFT впервые появилась в 1973 году. Представили ее миру 250 банков, расположенные в 15 странах Европы и Северной Америки. Это было всемирное сообщество интербанковских финансовых телекоммуникаций/Society for Worldwide Inerbank Financial Telecommunication, кратко S.W.I.F.T.


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


После внедрения системы, скорость отправки переводов увеличилась, что привело к уменьшению стоимости оказываемой услуги. Затрачиваемое время на прием сообщения составляет около четверти часа, это время можно еще сократить, но при увеличении стоимости услуги. Оплатив дополнительный тариф, можно отправить перевод за 1 или 5 минут. Аналогичная процедура с использованием телеграфа займет около 1 часа 30 минут.

 

SWIFT сегодня


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


К системе SWIFT присоединились биржи, центральные депозитарии, фирмы, работающие с ценными бумагами, брокерские конторы.


В России организована ассоциация РОССВИФТ, насчитывающая уже около 600 организаций, являющихся серьезными кредитными фирмами. Они проводят через РОССВИФТ примерно 80 процентов расчетов. Россия занимает второе место после Америки по числу заказчиков, применяющих эту систему.


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


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

 

Оформление SWIFT перевода


оформление SWIFTПереводы SWIFT оформляются следующим образом:


— с расчетного счета или без открытия счета.

— получение наличными деньгами, минуя процедуру зачисления на счет или.

— зачисление денежных средств на счета юридических или физических лиц.


Для оформления перевода клиенту следует указать:


— банковские реквизиты того, кому отправлен перевод, т.е. получателя.

— для банка получателя указать SWIFT-код.

— документ, удостоверяющий личность.

— номер счета (рублевого или валютного)

— заявление по форме 364 – в для перевода в иностранной валют или по форме 364 – р, если переводятся рубли. Этот документ заполняется на бланке, который выдает банк.


SWIFT–код присваивается каждому представителю сообщества, после утверждения его членства на совете директоров. При положительном решении участнику выдается соответствующий документ с указанием кода.


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


Стандартом ISO 9362 (ISO 9362 — BIC) предусмотрена процедура присвоения идентификационных кодов. Регламентом стандарта предписано формировать код в виде комбинации из цифр и букв.


BBBB CC LL DDD


В этом наборе символов подразумеваются следующие значения:


1. BBBB — буквы, идентифицирующие члена системы.

2. CC — буквенный код страны.

3. LL – буквенно-цифровой код, указывающий на местоположение. Запрещено использовать цифры ноль и один. Если в поле проставлена единица, то код неактивен. Ноль применяется только в период тестирования.

4. DDD – код филиала. При отсутствии у банка филиала, применяется значение XXX.


РОССВИФТОМ разработан стандарт, в котором прописан порядок оформления переводов.


Отправитель должен знать следующие сведения о получателе:


— SWIFT–код банковского учреждения.

— полное наименование банка.

— фамилию, имя, (отчество – если возможно) получателя.

— номер счета получателя (двадцать цифр).

— адрес получателя или паспортные данные (если счет не открывается).

— наименование отделения банка (при наличии отдельного кода).

— номер подразделения (если счет не открывается).

— наименование посреднического банка.

 

Система SWIFT обеспечивает


Система SWIFT обеспечивает— единообразную технологическую цепочку обработки и подготовки информации.

— надежность защиты, передачи и обработки данных.

— мгновенную обработку сообщений.

— минимизацию ошибок.

— надежность взаимодействия клиентов.

— сокращение операционных расходов.

— переводы по телеграфу.

— извещает о получении переводов.

— обменные валютные операции.

— информацию о вкладах, запросы по займам.

— предоставление долгосрочных займов и вкладов.

— выполнение платежей по процентам.

— информацию по кредиту и дебету.

— выписки по счетам.


Применяя SWIFT, пользователи могут отказаться от бумажного оборота и применить электронный обмен документами.


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


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


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


В зависимости от страны, используемой валюты, места нахождения получателя, переводимой суммы, каждый банк утверждает свои расценки. Однако, тарифы SWIFT более привлекательны, чем тарифы других систем.


В качестве примера отметим, что тариф на международные переводы в Далькомбанке более десяти долларов США. Российский Сбербанк предоставляет аналогичную услугу по цене 1 % от суммы перевода, (от 15 до 200 долларов США).


Обсуждаемая система переводов достаточно эффективна и надежна. Опытные пользователи уже проверили все особенности ее применения.

что это? Система переводов SWIFT

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

Общие данные

Система переводов СВИФТ — что это? Какова история этой сети? Значение слова СВИФТ — это аббревиатура, под которой необходимо понимать Сообщество финансовых межбанковских всемирных телекоммуникаций. Система переводов СВИФТ – международная система для передачи информации, совершения платежей. Она была основана в начале семидесятых годов двадцатого века в Бельгии. Штаб-квартира находится в городе Брюсселе. По официальным данным, в эту сеть входят двести двенадцать стран и более десяти тысяч учреждений. Через эту систему проходят более двадцати миллионов разных транзакций за один день. Среди них есть межбанковские платежи, финансовые сообщений, денежные переводы и другие.

свифт что это

Система СВИФТ – это не только денежные переводы

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

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

 cистема переводов свифт

Преимущества от использования перевода СВИФТ

Транзакции с использованием вышеописанной системы выгодны, если сумма составляет более ста долларов Соединенных Штатов Америки, так как выше уже начинается фиксированная комиссия. Если перевод планируется менее чем на сто долларов, то рекомендуется использовать другие варианты мгновенных переводов: MoneyGram или Western Union, например. Система СВИФТ — что это? Какие она дает преимущества? Основное яркое отличие данной сети от других альтернативных вариантов – это выбор широчайшего спектра валют, адресность перевода. Все это в сумме делает работу с финансами гораздо более безопасной.

swift перевод

Какие есть недостатки у системы SWIFT?

Естественно, что любая, даже самая лучшая, система будет иметь свои негативные стороны. Но если говорить о СВИФТ, что это за недостатки?

Во-первых, необходимо сказать о повышенных комиссиях в отдельных банках и странах. За перевод денежных средств в определенные государства некоторые банки устанавливают дополнительную комиссию. Цепочка же банков-посредников может и без того повысить стоимость перевода в том случае, если валюта процедуры отличается от той национальной валюты, в которую поступает транзакция. Во-вторых, существуют комиссии, которые взимаются с получателей. Так как средства попадают на счет получателя в его банке, есть определенный платеж за процедуру обналичивания средств. Также хочется добавить, что SWIFT (перевод) занимает гораздо больше времени (вплоть до нескольких дней), чем многие другие виды платежей (которые занимают в среднем от получаса до суток).

свифт код

Что необходимо для перевода по системе СВИФТ?

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

  1. Код — СВИФТ банка, в который будет осуществлен перевод.
  2. Код международного формата банковского счета (IBAN), или номер счета, в пользу которого происходит транзакция.
  3. Название фирмы, компании или ФИО получателя, в пользу которых будет осуществлен перевод средств.
  4. Название банковского учреждения, в которое поступят деньги.
  5. СВИФТ-код и наименование банка-корреспондента, в случае если валюта, в которой осуществляется перевод, отличается от той, которая считается в стране-получателе национальной. свифт банка

Данный тип перевода на сегодняшний день предлагают все более-менее крупные банки.

Кому пригодится система переводов SWIFT?

Несмотря на популярность таких систем денежных переводов международного уровня, как «Юнистрим», «МаниГрам», «Вестерн Юнион», в ряде случаев намного удобнее использовать СВИФТ в качестве сети обмена. Все денежные переводы с помощью этой системы являются намного более дешевыми и удобными для оплаты целого спектра услуг, будь то медицинское обслуживание, учеба, бронирование номеров или заказов, оплата покупок. SWIFT-перевод активно используется для перечисления денег родственникам, оплаты разных мероприятий (участия в конференциях, туров).

Кто оплачивает перевод?

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

значение слова свифт

Стоимость переводов в системе СВИФТ

По сравнению с конкурентными сетями денежных международных переводов, SWIFT предлагает гораздо более дешевые транзакции. Однако это действительно хорошо заметно только при отправке крупных сумм, так как действует прогрессивная шкала комиссионных отчислений. Например, отправить сто долларов Соединенных Штатов Америки через любую другую систему международных переводов будет стоить от десяти до двадцати долларов. А перевод той же суммы через сеть СВИФТ обойдется в несколько раз дороже – вплоть до пятидесяти условных единиц. Кстати говоря, очень многое зависит тут от банка, который выполняет транзакцию.

А вот при переводе тысячи долларов США через крупные МСДП комиссия будет доходить до пятидесяти долларов. Тут выгодно смотрится система переводов СВИФТ, которая взимает за подобного размера суммы комиссию всего в десять-пятнадцать условных единиц. Самой заметной становится разница, когда суммы переваливают за десять тысяч. Тут комиссия в крупных МСДП уже будет в диапазоне от ста до трехсот пятидесяти долларов Соединенных Штатов Америки. А вот если клиент хотел бы перевести деньги родственнику за границу, оплатить покупку или учебу, заплатить за туристическую поездку с помощью такой сети, как международная система переводов СВИФТ, то ему придется заплатить за транзакцию в размере десяти тысяч максимум сто долларов.

Язык программирования Swift. Русская версия / Apphud corporate blog / Habr

Привет, Хабр! 2 июня все мы воочию могли наблюдать, как компания Apple начала творить революцию в стане Objective-C разработчиков, представив миру свой новый язык программирования – Swift. Вместе с этим, она выложила в открытый доступ небольшую документацию по языку, которую мы решили перевести, если на то будет спрос. Предлагаем вашему вниманию перевод первой главы. Если тема будет интересна, то мы продолжим публиковать перевод каждую неделю.
Оглавление

Добро пожаловать в Swift
    О Swift
    Введение в Swift

Language guide
    The Basics
    Basic Operators
    String and Characters
    Collection Types
    Control Flow
    Functions
    Closures
    Enumerations
    Classes and Structures
    Properties
    Methods
    Subscripts
    Inheritance
    Initialization
    Deinitialization
    Automatic Reference Counting
    Optional Chaining
    Type Casting
    Nested Types
    Extensions
    Protocols
    Generics
    Advanced Operators

Language Reference
    About the Language Reference
    Lexical Structure
    Types
    Expressions
    Statements
    Declarations
    Attributes
    Patterns
    Generic Parameters and Arguments
    Summary of the Grammar
    Trademarks

Добро пожаловать в Swift

О языке Swift

Swift – это новый язык программирования для разработки iOS и OS X приложений, который сочетает в себе все лучшее от C и Objective-C, но лишен ограничений, накладываемых в угоду совместимости с C. В Swift используются паттерны безопасного программирования и добавлены современные функции, превращающие создание приложения в простой, более гибкий и увлекательный процесс. Swift, созданый нами с чистого листа, – это возможность заново представить себе, как разрабатываются приложения.

Swift разрабатывался нами несколько лет. Основой нового языка программирования послужили существующие компилятор, отладчик и фреймворки. Мы упростили процесс управления памятью с помощью механизма автоматического подсчета ссылок – Automatic Reference Counting (ARC). Наши фреймворки также подверглись серьезной модернизации. Objective-C начал поддерживать блоки, литералы и модули – все это создало благоприятные условия для внедрения современных технологий. Именно эта подготовительная работа послужила фундаментом для нового языка программирования, который будет применяться для разработки будущих программных продуктов для Apple.

Разработчикам Objective-C Swift покажется знакомым. Он сочетает в себе читабельность именованных параметров и мощь динамической объектной модели Objective-C. Он открывает доступ к уже существующим фреймворкам Cocoa и совместим с кодом, написанным на Objective-C. Построенный на этой общей основе язык предлагает множество новых возможностей и унифицирует процедурные и объектно-ориентированные аспекты языка программирования.

Swift не отпугнет и начинающих программистов. Это первый мощный язык программирования, такой же понятный и увлекательный, как скриптовый язык. Он поддерживает так называемые playground-ы, которые позволяют программистам экспериментировать с кодом, видя результат в режиме реального времени без необходимости компилировать и запускать приложение.

Swift вобрал в себя все лучшее от современных языков и разработан с учетом обширного опыта компании Apple. Наш компилятор – синоним производительности, наш язык оптимизирован для разработки без оглядки на компромиссы. Он спроектирован таким образом, чтобы вы смогли легко разработать и ваше первое приложение «hello, world!», и даже целую операционную систему. Все это делает Swift важным инструментом для разработчиков и для самой компании Apple.

Swift – это новый фантастический способ создавать приложения для iOS и OS X, и мы продолжим развивать его, добавляя новый функционал и представляя новые возможности. Наша цель – амбициозна. И мы с нетерпением ждем, чтобы увидеть, что вы сумеете создать при помощи него.

Введение в Swift

По давней традиции первая программа на новом языке должна выводить на экран слова “Hello, world”. С помощью Swift это делается так:
println("Hello, world")

Если вы когда-нибудь разрабатывали на C или Objective-C этот синтаксис должен казаться вам до боли знакомым – в Swift эта строчка кода является законченной программой. Вам больше не нужно импортировать отдельные библиотеки для обеспечения базового функционала вроде ввода/вывода в консоль или работы со строками. Код, написанный в глобальной области видимости, является точкой входа в программу, таким образом функция main больше не нужна. Также обратите внимание на отсутствие точки с запятой в конце каждой строки.

Это введение содержит достаточно информации, чтобы начать писать код на Swift. Не переживайте, если вам будет что-то непонятно – мы все детально объясним в последующих главах.

Замечание
Для лучшего понимания материала мы рекомендуем использовать режим playground в Xcode. Playground позволяет вам видеть результат сразу в процессе редактирования кода без необходимости компилировать и запускать приложение.

Простые типы данных

Используйте let для создания константы и var для создания переменной. Тип константы указывать не нужно, вы можете присвоить ей значение лишь единожды.
var myVariable = 42
myVariable = 50
let myConstant = 42

Типы константы и переменной должны совпадать с типами присваиваемых им соответствующих значений. Однако это не означает, что вы должны напрямую указывать их тип. Компилятор автоматически определит тип константы и переменной при присваивании им значения. Так, в приведенном примере компилятор определит, что myVariable имеет целочисленный тип.

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

let implicitInteger = 70
let inplicitDouble = 70.0
let inplicitDouble: Double = 70

Давайте поэкспериментируем
Создайте константу с типом Float и проинициализируйте ее числом 4.

Значения никогда не конвертируются в другой тип неявно. Если вам необходимо конвертировать значение в другой тип, делайте это явно:
let label = "The width is "
let width = 94
let widthLabel = label + String(width)

Давайте поэкспериментируем
Попробуйте удалить явное преобразование к типу String в последней строке. Какую ошибку вы получите?

Имеется более простой способ включения значений в строки: для этого заключите выражение в скобки и поставьте перед ними обратный слэш (\). Пример:
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."

Давайте поэкспериментируем
Попробуйте использовать конструкцию \() и выведите на экран строку, включающую результат суммы двух целочисленных переменных и чье-нибудь имя.

При работе с массивами и ассоциативными массивами (словарями, dictionary) используются квадратные скобки ([]):
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
 
var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"

Чтобы создать пустой массив или dictionary, используйте следующий синтаксис:
let emptyArray = String[]()
let emptyDictionary = Dictionary<String, Float>()

Для создания пустых массивов и словарей используйте [] и [:] соответственно, – например, когда вы присваиваете новое значение переменной или передаете аргумент в функцию.
shoppingList = []   // Went shopping and bought everything.
Условия и циклы

Для создания условий используются операторы if и switch, для создания циклов – for-in, for, while и do-while. При этом выделять круглыми скобками условия и инициализирующие выражения необязательно, тогда как фигурные скобки обязательны.
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
teamScore

Условие внутри оператора if должно быть логическим, это в частности означает, что выражение if score {…} является ошибочным, поскольку здесь нет явного сравнения (например, с нулем).

Условный оператор if можно использовать совместно с let и var для работы с константами и переменными, которые могут иметь значение nil. Такие константы и переменные называются опциональными (то есть они могут либо принимать какое-либо значение, либо быть равны nil). Чтобы создать опциональную переменную или константу добавьте знак вопроса (?) после указания типа.

 var optionalString: String? = "Hello"
optionalString == nil
 
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}

Давайте поэкспериментируем
Измените optionalName на nil. Что вы видите на экране? Добавьте блок else для обработки случая, когда optionalName равен nil.

Если опциональное значение равно nil, условие будет ложным и код в фигурных скобках после if выполнен не будет. В противном случае переменной greeting будет присвоено новое значение.

Оператор множественного выбора switch поддерживает внутри себя множество других операторов сравнения и не ограничен лишь простыми сравнениями:

let vegetable = "red pepper"
switch vegetable {
case "celery":
    let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
    let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
    let vegetableComment = "Is it a spicy \(x)?"
default:
    let vegetableComment = "Everything tastes good in soup."
}

Давайте поэкспериментируем
Попробуйте удалить условие по умолчанию. Какую ошибку вы получите?

После выполнения подходящего блока кода, программа покидает оператор switch, не проверяя последующие условия. Таким образом вам не нужно вручную добавлять операторы прерывания (break) в конце каждого блока case.

Для перебирания элементов ассоциативного массива используйте оператор for-in совместно с указанием пары имен для каждой пары ключ-значение.

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
largest

Давайте поэкспериментируем
Добавьте еще одну переменную, которая позволит выяснить, к какому из трех типов относится найденное максимальное число.

Оператор цикла while позволяет выполнять блок кода внутри него до тех пор, пока условие не станет ложным. Условие также может быть указано после блока, который в таком случае будет выполнен по крайней мере один раз.
var n = 2
while n < 100 {
    n = n * 2
}
n
 
var m = 2
do {
    m = m * 2
} while m < 100
m

Оператор for можно использовать для перебора последовательности чисел с помощью двух точек (..) или с помощью инициализатора, условия и инкремента. Посмотрите, эти два цикла делают одно и то же:
var firstForLoop = 0
for i in 0..3 {
    firstForLoop += i
}
firstForLoop
 
var secondForLoop = 0
for var i = 0; i < 3; ++i {
    secondForLoop += 1
}
secondForLoop

При создании цикла используйте две точки (..), если не хотите включать большее значение в диапазон, и три точки (), чтобы включить как меньшее, так и большее значения.
Функции и замыкания.

Для объявления функций используйте ключевое слово func. Вызов функции производится через указание ее имени и списка аргументов в круглых скобках. Возвращаемый тип следует отделить от перечня формальных аргументов с помощью ->.
func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")

Давайте поэкспериментируем
Удалите параметр day. Вместо него добавьте переменную, обозначающую наименование подаваемого на обед блюда.

Если функция возвращает множество значений, следует использовать кортеж:
func getGasPrices() -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79)
}
getGasPrices()

Функции также могут иметь неопределенное число аргументов:
func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}
sumOf()
sumOf(42, 597, 12)

Давайте поэкспериментируем
Напишите функцию, позволяющую находить среднее арифметическое произвольного числа своих аргументов.

Функции могут вкладываться друг в друга. Вложенная функция может обращаться к переменным, объявленным во внешней функции. Используйте вложенные функции, чтобы привести в порядок код сложной или большой функции.
func returnFifteen() -> Int {
    var y = 10
    func add() {
        y += 5
    }
    add()
    return y
}
returnFifteen()

Функции являются объектами первого класса (first-class type), иными словами, функция в качестве свого результата может возвращать другую функцию.
func makeIncrementer() -> (Int -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)

Функция также может принимать другую функцию в качестве одного из аргументов.
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}
func lessThanTen(number: Int) -> Bool {
    return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)

Функции являются частным случаем замыканий. Вы можете создать замыкание, не указывая его имени и окружив тело замыкания фигурными скобками ({}). Для отделения аргументов и типа возвращаемого значения от тела замыкания используйте оператор in.
numbers.map({
    (number: Int) -> Int in
    let result = 3 * number
    return result
    })

Давайте поэкспериментируем
Перепишите замыкание таким образом, чтобы оно возвращало ноль для всех лишних чисел.

Существует несколько техник, позволяющих делать замыкания более лаконичными. Если тип замыкания априори известен (например, это callback делегата), можно опустить указание типа его параметров и/или типа возвращаемого значения. Замыкания, состоящие из единственного выражения, неявно возвращают результат этого выражения.
numbers.map({ number in 3 * number })

В замыкании вместо указания имени переменной, вы можете использовать ее порядковый номер – это особенно полезно при написании коротких замыканий. Замыкание, являющееся последним аргументом функции, может быть передано в нее сразу после круглых скобок с перечнем остальных параметров.
sort([1, 5, 3, 12, 2]) { $0 > $1 }
Объекты и классы

Для создания класса используется зарезервированное слово class. Члены класса объявляются точно так же, как и обычные константы и переменные. Более того, методы класса объявляются как обычные функции.
class Shape {
    var numberOfSides = 0
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

Давайте поэкспериментируем
Добавьте константу-член класса и метод класса, принимающую ее в качестве своего аргумента.

Чтобы создать экземпляр (объект) класса, достаточно добавить круглые скобки после названия класса. Доступ к методам и членам класса осуществляется через точку.
var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()

В этом примере мы упустили одну важную деталь – конструктор класса, метод init.
class NamedShape {
    var numberOfSides: Int = 0
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

Обратите внимание, как член класса name при помощи self отделен от аргумента конструктора name. Аргументы передаются в конструктор обычным образом, как и в любой другой метод класса. Обратите внимание на то, что каждый член класса должен быть проинициализирован – либо при объявлении (как, например, numberOfSides), либо в конструкторе (как name).

Деструктор класса – метод deinit, который можно переписать в случае необходимости.

Чтобы наследовать класс от уже существующего класса, после указания имени дочернего класса следует поставить двоеточие и указать название родительского. В Swift нет никаких ограничений по обязательному наследованию какого-либо стандартного класса.

Переопределенные дочерним классом методы должны быть помечены ключевым словом override – переопределение методов без override приведет к ошибке. Компилятор также выявляет методы, маркированные override, но не переопределяющие какие-либо методы своего родительского класса.

class Square: NamedShape {
    var sideLength: Double
    
    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 4
    }
    
    func area() ->  Double {
        return sideLength * sideLength
    }
    
    override func simpleDescription() -> String {
        return "A square with sides of length \(sideLength)."
    }
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()

Давайте поэкспериментируем
Создайте класс Circle и наследуйте его от класса NamedShape. Конструктор класса Circle принимает два аргумента – радиус и название. Переопределите методы area и describe этого класса.

Члены класса могут также иметь собственные getter и setter.
class EquilateralTriangle: NamedShape {
    var sideLength: Double = 0.0
    
    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 3
    }
    
    var perimeter: Double {
    get {
        return 3.0 * sideLength
    }
    set {
        sideLength = newValue / 3.0
    }
    }
    
    override func simpleDescription() -> String {
        return "An equilateral triagle with sides of length \(sideLength)."
    }
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
triangle.perimeter
triangle.perimeter = 9.9
triangle.sideLength

В setter-е переменной perimeter новое присваиваемое значение неявно называется newValue. Вы можете изменить название этой переменной, указав его в скобках сразу после set.

Обратите внимание на структуру конструктора класса EquilateralTriangle. Этот метод включает в себя три последовательных шага:

  1. инициализация членов дочернего класса;
  2. вызов конструктора родительского класса;
  3. изменение значений членов родительского класса.

Если вам необходимо выполнить определенный код до или после присваивания нового значения переменной, вы можете переопределить методы willSet и didSet нужным вам образом. Например, в приведенном ниже классе гарантируется, что длина стороны треугольника всегда будет равна длине стороны квадрата.
class TriangleAndSquare {
    var triangle: EquilateralTriangle {
    willSet {
        square.sideLength = newValue.sideLength
    }
    }
    var square: Square {
    willSet {
        triangle.sideLength = newValue.sideLength
    }
    }
    init(size: Double, name: String) {
        square = Square(sideLength: size, name: name)
        triangle = EquilateralTriangle(sideLength: size, name: name)
    }
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
triangleAndSquare.square.sideLength
triangleAndSquare.triangle.sideLength
triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
triangleAndSquare.triangle.sideLength

У методов классов имеется одно важное отличие от функций. Названия аргументов функции используются только в пределах этой функции, тогда как в методе класса параметры также используются при вызове этого метода (кроме первого параметра). По умолчанию метод класса имеет одинаковые названия параметров как при вызове, так и внутри себя. Однако вы можете указать другое название (в примере ниже – times), которое будет использовано только внутри этого метода. При этом для вызова этого метода необходимо использовать первое название (numberOfTimes).
class Counter {
    var count: Int = 0
    func incrementBy(amount: Int, numberOfTimes times: Int) {
        count += amount * times
    }
}
var counter = Counter()
counter.incrementBy(2, numberOfTimes: 7)

При работе с опциональными значениями добавьте знак вопроса (?) перед методами, членами класса и т.д. Если значение перед знаком вопроса равно nil, все, что следует после (?) игнорируется и значение всего выражения равно nil. В противном случае выражение вычисляется обычным образом. В обоих случаях результатом всего выражения будет опциональное значение.
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength
Перечисления и Структуры

Для создания перечислений используется ключевое слово enum. Отметим, что перечисления также могут иметь в своем составе методы.
enum Rank: Int {
    case Ace = 1
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    case Jack, Queen, King
    func simpleDescription() -> String {
        switch self {
        case .Ace:
            return "ace"
        case .Jack:
            return "jack"
        case .Queen:
            return "queen"
        case .King:
            return "king"
        default:
            return String(self.toRaw())
        }
    }
}
let ace = Rank.Ace
let aceRawValue = ace.toRaw()

Давайте поэкспериментируем
Напишите функцию, которая сравнивает 2 перечисления типа Rank по их значениям.

В вышеприведенном примере элементы перечисления первоначально имеют целочисленный тип, и вам достаточно указать значение только первого элемента – значения остальных элементов будут определены в соответствии с порядком их следования. В качестве исходного типа (raw value) значений элементов вы также можете выбрать строковый или вещественные типы.

Для преобразования исходного типа значения в тип перечисления используйте функции toRaw и fromRaw.

if let convertedRank = Rank.fromRaw(3) {
    let threeDescription = convertedRank.simpleDescription()
}

Отметим, что значения элементов перечисления являются фактическими, а не просто иной записью своих исходных значений. Вообще говоря, вы можете и не указывать их исходные значения.
enum Suit {
    case Spades, Hearts, Diamonds, Clubs
    func simpleDescription() -> String {
        switch self {
        case .Spades:
            return "spades"
        case .Hearts:
            return "hearts"
        case .Diamonds:
            return "diamonds"
        case .Clubs:
            return "clubs"
        }
    }
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()

Давайте поэкспериментируем
Добавьте метод Color, возвращающий строку “black” для Spades и Clubs и “red” для Hearts и Diamonds.

Обратите внимание на то, как осуществляется доступ к члену Hearts перечисления Suit. При присваивании значения константе hearts используется полное имя Suit.Hearts, поскольку мы явно не указываем тип этой константы. А в switch мы используем сокращенную форму .Hearts, поскольку тип значения self априори известен. Вы можете использовать сокращенную форму повсеместно, если тип переменной явно указан.

Для создания структур используется ключевое слово struct. Структуры имеют множество схожих черт с классами, включая методы и конструкторы. Одним из наиболее существенных отличий структур от классов является то, что экземпляры структур, в отличие от экземпляров классов, передаются в функции по значению (то есть предварительно создается их локальная копия), тогда как экземпляры классов передаются по ссылке.

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }
}
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()

Давайте поэкспериментируем
Добавьте в структуру Card метод, который создает полную колоду карт.

Экземпляр члена перечисления может иметь собственные значения и они могут быть разными. Вы присваиваете эти значения при создании экземпляра перечисления (константа success в примере). Связанные и исходные значения это разные вещи: исходное значение члена перечисления всегда постоянно для всех экземпляров перечисления и указывается при его объявлении.

Рассмотрим пример получения с сервера времени восхода и заката Солнца. Сервер отправляет в ответ либо соответствующую информацию, либо сообщение об ошибке.

enum ServerResponse {
    case Result(String, String)
    case Error(String)
}
 
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
 
switch success {
case let .Result(sunrise, sunset):
    let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
    let serverResponse = "Failure...  \(error)"
}

Давайте поэкспериментируем
Добавьте третий вариант в оператор множественного выбора switch

Обратите внимание, каким образом из объекта ServerResponse “вытаскиваются” время восхода и заката.
Протоколы и Расширения.

Для объявления протокола используйте ключевое слово protocol.
protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
}

Протоколы могут поддерживаться классами, перечислениями и структурами.
class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += "  Now 100% adjusted."
    }
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription
 
struct SimpleStructure: ExampleProtocol {
    var simpleDescription: String = "A simple structure"
    mutating func adjust() {
        simpleDescription += " (adjusted)"
    }
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription

Давайте поэкспериментируем
Создайте перечисление, которое будет реализовывать этот протокол.

Обратите внимание на ключевое слово mutating в определении структуры SimpleStructure, которое информирует компилятор о том, что соответствующий метод подвергает структуру изменениям. В противовес этому методы класса SimpleClass не нужно маркировать как mutating, поскольку методы класса всегда могут беспрепятственно его изменять.

Для добавления новых методов или членов класса в уже существующий тип необходимо использовать расширения – extensions. Вы также можете использовать расширения для реализации протокола уже существующим типом, даже если он импортирован из какой-либо библиотеки или фреймворка.

extension Int: ExampleProtocol {
    var simpleDescription: String {
    return "The number \(self)"
    }
    mutating func adjust() {
        self += 42
    }
}
7.simpleDescription

Давайте поэкспериментируем
Создайте расширение типа Double с переменной-членом absoluteValue.

Вы можете использовать название протокола как и любой другой тип – например, чтобы создать массив объектов разного типа, но реализующих общий протокол. Заметьте, что при работе с объектами такого типа методы, объявленные вне протокола, будут недоступны.
let protocolValue: ExampleProtocol = a
protocolValue.simpleDescription
// protocolValue.anotherProperty  // Uncomment to see the error

Несмотря на то, что во время выполнения программы переменная protocolValue имеет тип SimpleClass, компилятор считает, что ее тип – ExampleProtocol. Это означает, что вы не сможете случайно получить доступ к методам или членам класса, которые реализуются вне протокола ExampleProtocol.
Обобщенные типы (generics)

Для создания обобщенного типа, заключите имя в угловые скобки (<>).
func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
    var result = ItemType[]()
    for i in 0..times {
        result += item
    }
    return result
}
repeat("knock", 4)

Создавайте обобщенные функции, классы, перечисления и структуры.
// Reimplement the Swift standard library's optional type
enum OptionalValue<T> {
    case None
    case Some(T)
}
var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(100)

Если вы хотите задать обобщенные типу определенные требования, такие, как, например, реализация протокола или требование быть наследованным от определенного класса, используйте where.
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
    for lhsItem in lhs {
        for rhsItem in rhs {
            if lhsItem == rhsItem {
                return true
            }
        }
    }
    return false
}
anyCommonElements([1, 2, 3], [3])

Давайте поэкспериментируем
Измените функцию anyCommonElements таким образом, чтобы она возвращала массив общих элементов.

В простых случаях вы можете опустить where и написать имя протокола или класса после двоеточия. Выражение <T: Equatable> эквивалентно выражению <T where T: Equatable>.
Хотите внедрить подписки в iOS-приложение за 10 минут? Интегрируйте Apphud и:
— оформляйте покупки с помощью лишь одного метода;
— автоматически отслеживайте состояние подписки каждого пользователя;
— легко интегрируйте Subscription Offers;
— отправляйте события о подписках в Amplitude, Mixpanel, Slack и Telegram с учетом локальной валюты пользователя;
— уменьшайте Churn rate в приложениях и возвращайте отписавшихся пользователей.

SWIFT (платёжная система) — это… Что такое SWIFT (платёжная система)?


SWIFT (платёжная система)

Логотип SWIFT

SWIFT (Society for Worldwide Interbank Financial Telecommunications, англ. Сообщество всемирных межбанковских финансовых телекоммуникаций, по-русски произносится СВИФТ) — международная межбанковская система передачи информации и совершения платежей.

Основана в 1973; соучредителями выступили 239 банков из 15 стран.

SWIFT — кооперативное общество, созданное по бельгийскому законодательству, принадлежащее его членам — 8330 банкам из 205 стран (на конец 2007 года). Головной офис расположен в Брюсселе.

Каждый банк, включённый в систему, имеет свой уникальный SWIFT код. Теоретически для совершения платежа в Eвропе достаточно знать SWIFT код банка и IBAN код получателя.

В день через SWIFT проходит более миллиона транзакций о денежных переводах, межбанковских платежах, ценных бумагах,

После событий 11 сентября 2001 ЦРУ и Министерство финансов США получили доступ к финансовой информации сети SWIFT с целью отслеживания возможных финансовых транзакций террористов.

Ежегодно через SWIFT проходит 2,5 млрд платежных поручений.

См. также

Ссылки

Wikimedia Foundation. 2010.

  • Мерфи, Кевин
  • BTX

Смотреть что такое «SWIFT (платёжная система)» в других словарях:

  • Платёжная система — Платёжная система  совокупность правил, процедур и технической инфраструктуры, обеспечивающих перевод стоимости от одного субъекта экономики другому. Платёжные системы являются одной из ключевых частей современных монетарных систем. Обычно… …   Википедия

  • Платёжная система — (Payment system) Задачи и функции платёжной системы, элементы платежной системы Международные платёжные системы, электронные платёжные системы России, виды платёжных систем Содержание Содержание Раздел 1. Понятие , виды платёжных систем.… …   Энциклопедия инвестора

  • Платёжные системы — Платёжная система  совокупность процедур и связанных с ними компьютерных сетей, используемых для проведения финансовых транзакций на рынке облигаций, валютном рынке, на рынке производных финансовых инструментов и опционов, и для передачи средств… …   Википедия

  • Платёжные системы Интернет — Платёжная система  совокупность процедур и связанных с ними компьютерных сетей, используемых для проведения финансовых транзакций на рынке облигаций, валютном рынке, на рынке производных финансовых инструментов и опционов, и для передачи средств… …   Википедия

  • Платёжные системы Интернета — Платёжная система  совокупность процедур и связанных с ними компьютерных сетей, используемых для проведения финансовых транзакций на рынке облигаций, валютном рынке, на рынке производных финансовых инструментов и опционов, и для передачи средств… …   Википедия

  • SWIFT — Логотип SWIFT У этого термина существуют и другие значения, см. Swift. SWIFT (Society for Worldwide Interbank Financial Telecommunications, англ. Сооб …   Википедия

  • SWIFT (платежная система) — Логотип SWIFT SWIFT (Society for Worldwide Interbank Financial Telecommunications, англ. Сообщество всемирных межбанковских финансовых телекоммуникаций, по русски произносится СВИФТ)  международная межбанковская система передачи информации и… …   Википедия

  • SWIFT (сеть) — Логотип SWIFT SWIFT (Society for Worldwide Interbank Financial Telecommunications, англ. Сообщество всемирных межбанковских финансовых телекоммуникаций, по русски произносится СВИФТ)  международная межбанковская система передачи информации и… …   Википедия

  • Платежная система — Платёжная система  совокупность процедур и связанных с ними компьютерных сетей, используемых для проведения финансовых транзакций на рынке облигаций, валютном рынке, на рынке производных финансовых инструментов и опционов, и для передачи средств… …   Википедия

  • Электронная платежная система — Платёжная система  совокупность процедур и связанных с ними компьютерных сетей, используемых для проведения финансовых транзакций на рынке облигаций, валютном рынке, на рынке производных финансовых инструментов и опционов, и для передачи средств… …   Википедия

Leave a comment