Обработка ошибок в Swift 2

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

1. Цель-C

В Objective-C было слишком легко игнорировать обработку ошибок. Взгляните на следующий пример, в котором я игнорирую любые ошибки, которые могут возникнуть в результате выполнения запроса на выборку.

Приведенный выше пример показывает, что обработка ошибок в Objective-C — это то, что разработчик должен выбрать. Если вы хотите узнать, что пошло не так, если что-то пошло не так, то вы сообщите об этом API, передав ему указатель NSError . Пример ниже иллюстрирует, как это работает в Objective-C.

В то время как более ранние версии Swift не предлагали хорошего решения для обработки ошибок, Swift 2 дал нам то, о чем мы просили, и это стоило ожидания. В Swift 2 обработка ошибок включена по умолчанию. В отличие от Objective-C, разработчики должны явно указать компилятору, если они решат игнорировать обработку ошибок. Хотя это не заставит разработчиков принимать обработку ошибок, оно делает решение явным.

Если бы мы перевели приведенный выше пример на Swift, мы бы получили такое же количество строк. Несмотря на то, что объем кода, который вам нужно написать, остается неизменным, синтаксис делает его очень четким, что вы пытаетесь сделать.

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

2. Метательные функции

throws

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

Ключевое слово throws указывает, что init(contentsOfURL:options:) может выдать ошибку, если что-то пойдет не так. Если вы вызываете функцию throwing, компилятор выдаст ошибку, говоря об иронии. Это почему?

Создатели Swift уделили много внимания тому, чтобы сделать язык выразительным, и обработка ошибок именно такова, выразительна. Если вы попытаетесь вызвать функцию, которая может выдать ошибку, вызову функции должно предшествовать ключевое слово try . Ключевое слово try не является волшебным. Все, что он делает, это заставляет разработчика осознавать способность функции кидать.

Обработка ошибок без попытки

Подожди секунду. Компилятор продолжает жаловаться, хотя мы предшествовали вызову функции с ключевым словом try . Чего нам не хватает?

Обработка ошибок с помощью try

Компилятор видит, что мы используем ключевое слово try , но правильно указывает на то, что у нас нет возможности отследить любые ошибки, которые могут быть сгенерированы. Чтобы отлавливать ошибки, мы используем новое заявление Свифта do-catch .

do-catch

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

В обновленном примере ниже мы вызываем методы init(contentsOfURL:options:) в операторе do-catch . В предложении do мы вызываем функцию, используя ключевое слово try . В предложении catch мы обрабатываем все ошибки, возникшие при выполнении функции. Это образец, который очень распространен в Swift 2.

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

3. Бросать ошибки

В Objective-C вы обычно используете NSError , определенный в платформе Foundation, для обработки ошибок. Поскольку язык не определяет, как следует реализовывать обработку ошибок, вы можете сами определять свой класс или структуру для создания ошибок.

Перечисления являются мощными в Swift, и они хорошо подходят для обработки ошибок. Перечисления отлично подходят для функциональности сопоставления с образцом в предложении do-catch оператора do-catch . Проще проиллюстрировать это на примере. Начнем с определения перечисления, соответствующего протоколу ErrorType .

Мы определяем enum, PrinterError , который соответствует протоколу ErrorType . Перечисление имеет четыре переменных-члена. Теперь мы можем определить функцию для печати документа. Мы передаем функции экземпляр NSData и сообщаем компилятору, что она может генерировать ошибки, используя ключевое слово throws .

Чтобы напечатать документ, мы вызываем printDocumentWithData(_:) . Как мы видели ранее, нам нужно использовать ключевое слово try и заключить вызов функции в оператор do-catch . В приведенном ниже примере мы обрабатываем любые ошибки в предложении catch .

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

Это выглядит намного лучше. Но есть одна проблема. Компилятор уведомляет нас, что мы не обрабатываем каждую возможную ошибку, которую может printDocumentWithData(_:) метод printDocumentWithData(_:) .

Обработка ошибок должна быть исчерпывающей

Компилятор прав конечно. Предложение catch похоже на оператор switch в том смысле, что оно должно быть исчерпывающим и обрабатывать все возможные случаи. Мы можем добавить еще одно предложение catch для PrinterError. MaintenanceRequired или добавить в конце предложение catch-all. При добавлении предложения catch умолчанию ошибка компилятора должна исчезнуть.

4. Уборка после себя

Чем больше я узнаю о языке Swift, тем больше ценю его. defer заявление — еще одно замечательное дополнение к языку. Название довольно хорошо подводит итог, но позвольте мне показать вам пример, чтобы объяснить концепцию.

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

Это означает, что powerOffPrinter() вызывается, даже если printData(_:) выдает ошибку. Я уверен, что вы можете видеть, что это работает очень хорошо с обработкой ошибок Swift.

Положение оператора defer операторе if не имеет значения. Следующий обновленный пример идентичен в том, что касается компилятора.

Вы можете иметь несколько операторов defer если помните, что они выполняются в обратном порядке, в котором они появляются.

5. Распространение

Вполне возможно, что вы не хотите обрабатывать ошибку, а вместо этого позволите ей всплыть на объект, который способен или отвечает за обработку ошибки. Это хорошо. Не каждое выражение try должно быть заключено в оператор do-catch . Однако есть одно условие: функция, которая вызывает функцию выброса, должна быть самой функцией выброса. Посмотрите на следующие два примера.

Первый пример приводит к ошибке компилятора, потому что мы не обрабатываем ошибки, которые может printDocumentWithData(_:) . Мы решили эту проблему во втором примере, отметив printTestDocument() как throwing. Если printDocumentWithData(_:) выдает ошибку, то ошибка передается вызывающей стороне функции printTestDocument() .

6. Обход ошибок

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

В Swift восклицательный знак всегда служит предупреждением. Восклицательный знак в основном говорит разработчику, что Swift больше не несет ответственности, если что-то пойдет не так. И это то, что try! Ключевое слово говорит вам. Если вы предшествуете вызову функции throw с помощью try! Ключевое слово, также известное как выражение принудительной попытки, распространение ошибок отключено.

Хотя это может звучать фантастически для некоторых из вас, я должен предупредить вас, что это не то, что вы думаете. Если функция throwing выдает ошибку и вы отключили распространение ошибки, вы столкнетесь с ошибкой во время выполнения. Это в основном означает, что ваше приложение будет зависать. Вы были предупреждены.

7. Objective-C API

Команда Swift в Apple приложила немало усилий, чтобы сделать обработку ошибок максимально прозрачной для API Objective-C. Например, вы заметили, что первым примером Swift этого руководства является API Objective-C. Несмотря на то, что API написан на Objective-C, метод не принимает указатель NSError качестве последнего аргумента. Для компилятора это обычный метод броска. Вот как выглядит определение метода в Objective-C.

Что такое система переводов SWIFT и как ей пользоваться: объясняем доступным языком

Что такое система переводов SWIFT и как ей пользоваться: объясняем доступным языком

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

Что это такое

SWIFT (Society for Worldwide Interbank Financial Telecommunications) – международная система переводов, созданная в 1973 году и до сегодняшнего дня не утратившая актуальность. Почти 12 тысяч финансовых организаций и банков из разных стран мира используют систему при работе с клиентами. Каждый человек, благодаря SWIFT, может отправлять наличные средства по территории своей страны и за ее пределы, которые быстро доходят до получателей.

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

Как расшифровать код

SWIFT – это особый реквизит банка, без которого невозможно проводить переводы внутри одноименной системы. Это такая комбинация букв и цифр, которая позволяет идентифицировать конкретный банк. При формировании кода используются международные стандарты ISO 9362 (ISO 9362 – BIC), ISO 3166 (код страны).

Реквизит SWIFT может иметь комбинацию букв и цифр, количество символов в которой варьируется от 8 до 11. Например, у Тинькофф он выглядит следующим образом – «TICSRUMMXXX». Он подразделен на 4 смысловые группы, каждая из которых характеризует банк-получатель:

  • 1-4 символы являются латинскими заглавными буквами. Эта часть кода индивидуальная у каждого банка, так как присваивается исходя из названия (берется английское звучание). Например, у Сбербанка первые 4 символа – SABR.
  • 2 символа – страна банка. Например, в РФ кредитной организации присваивается – RU.
  • 2 символа – внутригосударственное местонахождение банка. Например, кредитная организация из Москвы – ММ.
  • 3 символа – могут отсутствовать. С их помощью уточняется информация о филиале банка, в который должны поступить средства. Если эти символы отсутствуют в реквизитах кредитной организации, то при заполнении платежки отправитель вместо них пишет «ХХХ».

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

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

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

  1. Заказчик – свой банк.
  2. Банк заказчика – Банк-отправитель.
  3. Банк-отправитель – Корреспондент банка-отправителя.
  4. Корреспондент банка-отправителя – Корреспондент банка-получателя.
  5. Корреспондент банка-получателя – Банк-получатель.
  6. Банк-получатель – Банк исполнителя.
  7. Банк исполнителя – Исполнитель.

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

Кто может пользоваться системой

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

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

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

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

На обработку транзакции у банка может потребоваться от суток до нескольких дней (если платеж проводится внутри одного банка, то он может дойти до получателя в течение 24 часов).

Тарифы и другие условия перевода

Каждая кредитная организация в индивидуальном порядке разрабатывает условия для SWIFT платежей и самостоятельно устанавливает размер комиссии. Например, Сбербанк – первый на территории России оператор системы, он раньше других начал проводить переводы через SWIFT. Желающим отправить деньги через Сбербанк нужно знать о следующих условиях:

  • переводить можно любую сумму , так как отсутствуют ограничения по минимальному и максимальному лимиту (но если перевод превышает 5 000 долларов, то нужно документально подтвердить источник происхождения денег, такая норма введена для предупреждения легализации доходов полученных преступным путем);
  • деньги доходят до получателя в течение 2 суток;
  • после отправки денег перевод при необходимости можно отозвать.

За отправку денег Сбербанк взимает комиссию:

Название валюты Тариф (% от суммы транзакции) Максимальная комиссия Минимальная комиссия
Рубли 2% 1500 руб. 50 руб.
Иностранная валюта 1% 200 у. е. 15 у. е.

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

Лучшим решением для любого клиента в России станет открытие мультивалютного счета/карты, благодаря чему внутри РФ он сможет делать рублевые SWIFT-переводы, а за рубеж отправлять деньги в указанной валюте.

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

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

Самое главное: чтобы отправить средства в другую страну, клиент должен узнать у получателя номер его счета в формате, в котором этот счет используется в своей стране (например, IBAN), а также реквизиты и SWIFT банка (например, код банковской организации SABRRUMMSE1), через который он будет получать перевод. Еще от получателя потребуются его личные данные – фамилия и имя, написанные латинскими буквами. Отправитель при себе должен иметь свой паспорт, и ему нужно будет заполнить заявление по форме 364-р или Ф. 364-в.

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

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

Как получить деньги

Отправитель должен предупредить получателя, которому отправлен перевод на предъявителя о том, что деньги могут к нему идти в течение 2-3 суток. Более точную информацию о времени поступления средств он сможет узнать в своем банке, реквизиты которого передал отправителю.

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

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

Отправитель денег может оформить перевод на предъявителя или провести SWIFT платеж сразу на счет получателя (в этом случае ему не придется лично идти в банк за деньгами, так как о поступлении средств он узнает из смс-уведомления).

Источники:

https://coderlessons. com/articles/mobilnaia-razrabotka-articles/obrabotka-oshibok-v-swift-2

https://bankstoday. net/last-articles/chto-takoe-sistema-perevodov-swift-i-kak-ej-polzovatsya-obyasnyaem-dostupnym-yazykom

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: