Swift код к статьям автора Chris Eidhof

В этом посте представлен Swift код, который сопровождал изучение и перевод статей Chris Eidhof. Статьи переведены на русский и представлены на этом сайте.

Вот эти статьи:

  1.  “Работа с JSON в Swift. Безопасно и просто.” (перевод) – оригинал Chris Eidhof  “Parsing JSON in Swift. Safe and easy”
  2. Выступление в San Francisco “Функциональное программирование в Swift на примере JSON” (перевод).

Continue reading

3.Парсинг вложенных JSON и массивов (Arrays) в Swift

В предыдущих постах  – first post, second post (и соответствующие перевод первого поста и второго) – по поводу парсинга JSON в Swift. мы видели как можно использовать концепции функционального программирования и дженерики ( generics), чтобы сделать парсинг  JSON кратким и читабельным. Прошлый раз мы остановились на пользовательских операторах, позволяющих проводить декодирование JSON в Модель объектов с использованием infix нотации. В этом случае реализация Модели выглядела так:

struct User: JSONDecodable {
  let id: Int
  let name: String
  let email: String?

  static func create(id: Int)(name: String)(email: String?) -> User {
    return User(id: id, name: name, email: email)
  }

  static func decode(json: JSON) -> User? {
    return _JSONParse(json) >>> { d in
      User.create
        <^> d <|  "id"
        <*> d <|  "name"
        <*> d <|? "email"
    }
  }
}

Теперь мы можем проводить JSON парсинг непосредственно в модель нашего объекта, используя  операторы <| и <|? . Окончательный кусок, который мы здесь пропустили, – это возможность получать данные из вложенных JSON объектов и возможность парсинга массивов.

Continue reading

1.Эффективный JSON с функциональными концепциями и дженериками в Swift

Это перевод первой статьи  Efficient JSON in Swift with Functional Concepts and Generics, написанной Tony DiPasquale

Несколько месяцев назад Apple представила новый язык программирования, Swift, чем сильно воодушевила разработчиков относительно будущего написания приложений для iOS и OS X. Люди немедленно, начиная с версии  Xcode 6 Beta1 начали пробовать Swift и понадобилось не так много времени, чтобы обнаружить, что парсинг JSON – редкое приложение обходится без него – не так прост как в Objective-C. Swift является статически типизованным языком, а это означает, что мы не можем больше забрасывать объекты в типизованные переменные и заставлять компилятор доверять нам, что они таковыми и являются. Теперь, в Swift, компилятор выполняет проверку, давая нам уверенность, что мы случайно не вызовем runtime ошибки. Это позволяет нам опираться на компилятор при создании безошибочного кода, но это также означает, что мы должны делать дополнительную работу, чтобы его удовлетворить. В этом посту я обсуждаю API для парсинга JSON, который использует концепции функционального программирования и дженерики ( Generics ) для создания читаемого и эффективного кода.

Continue reading

8.A.Управление ошибками и Optionals в Swift – интерпретация в коде.

В этом посте представлен Swift код, который сопровождал изучение и перевод статей Alexandros Salazar. Статьи переведены на русский и представлены на этом сайте.

Вот эти статьи:

  1. “Управление ошибками в Swift: магия и могущество” –  в оригинале: “Error handling in Swift: Might and Magic”
  2. “Управление ошибками в Swift: магия и могущество -2” – в оригинале: “Error handling in Swift: Might and Magic -2”
  3. “Понимание Optional Chaining” –  в оригинале: “Understanding Optional Chaining”
  4. “Подробнее об Implicitly Unwrapped Optionals” –  в оригинале: “Implicitly Unwrapped Optionals in Depth”

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

Был создан код, который работает в Swift 1.1, и интерпретирует идеи , представленные в вышеприведенных статьях. Моя интерпретация представлена ввиде файла Playground на Github.

Continue reading

2.C.Функциональное программирование в Swift на примере JSON

Это отрывок из выступления Chris Eidhof на встрече в Сан-Франциско, в котором он рассказал о возможностях функционального программирования в Swift, но не как о замещении Объектно-ориентированного программирования (OOP), а как о дополнительном инструменте разработки приложений.

Я привожу перевод только той части, которая относится к парсингу JSON.

Почему функциональное программирование?

Существует множество путей решения проблем помимо объектно-ориентированного (OOP). Вы уже знаете, как решать проблемы с помощью OOP, но теперь Swift делает это очень легко и удобно, используя функциональное программирование. В действительности, некоторые задачи даже легче решать, используя функциональное программирование!

Одна из этих задач – парсинг JSON

Continue reading

1.C.Работа с JSON (parsing) в SWIFT: безопасно и просто

 

Перевод статьи  Parsing JSON in Swift

После прочтения постов  Brent‘s и David‘s по парсингу JSON в Swift, я действительно захотел написать этот пост. Полный код, сопровождающий этот пост находится на GitHub.

В этом посте я дам лишь наброски к библиотеке по парсингу JSON в Swift типизованным и безопасным способом, то есть превращению нетипизованных JSON словарей в годные для дальнейшей обработке, типизованные словари. Я прямо скопировал пример JSON данных у Дэвида (David), и он выглядит так:

Continue reading

Пользовательский оператор управления потоками в Swift

Перевод статьи Custom Threading Operator in Swift.
Язык программирования Swift поддерживает пользовательские операторы, подобно перегрузке  операторов (operator overloading) в C++. Такие возможности языка программирования, как известно, позволяют “сверх активным” пользователям создавать “болото” из нечитаемого кода, поэтому я очень удивился, что эту возможность включили в Swift. Следует помнить, что перегрузка операторов, – это всего лишь более удобный способ вызова функций, поэтому не стоит увлекаться перегрузкой операторов. Однако, если их использовать сдержанно и с большой осторожностью, то определение новых операторов может дать элегантный и выразительный код с минимальными затруднениями  при чтении кода . В этой статье я показываю, как определить оператор, который упрощает переключение потоков, особенно при передаче выполнения из фонового  потока (background thread) в главный поток  (main thread) в iOS приложении.

Continue reading

7.A.Кульминация – Финальная часть

Это перевод статьи ALEXANDROS SALAZAR The Culmination: Final Part 

В моем последнем посте я наконец вышел и признался, что все мои посты об ошибках (errors) и Optionals были о монадах. И для оправдания этого великого обмана я постулировал for-comprehensions, отличный новый синтаксис в Магическом будущем Swift, который улучшает работу с Optionals и массивами—синтаксис, который работает только с монадами.

Итак, монады – это сущности, которые работают с for-comprehensions. Но for-comprehensions должны работать разумным способом, интуитивно. Я уже прошел через два требуемых поведения; они названы первыми двумя законами монады. Вы будете ошеломлены, узнав, что существует еще и третий закон.

Continue reading

6.A.Кульминация – часть 2

ALEXANDROS SALAZAR The Culmination: Part II

Это действительно так, я сказал “Монады”. Эта недоступная для понимания концепция, мистическая математическая химера, на которой  Haskell программисты клянутся перед оставшемся миром, закатывая глаза. Я же только сказал, что это слово имеет отношение к будущему Swift—что я, конечно, не могу точно знать, так как я не работаю на Apple, но которое я решил прогнозировать.

Смысл в том, что если вы дошли со мной так далеко, то вы практически уже подошли к монадам. Это немного больше: чем фундаментальный оператор  >>=-. Остальное, которое я собираюсь рассказать в этом посте, нужно для поддержки и управления—именно это делает их прекрасными, удобными и дружелюбными. Это заставляет вас полюбить их. И чтобы доказать это , я собираюсь начать с решения (с помощью Магического Будущего  Swift) проблемы unwrapping multiple Optionals –  “развернутых” множественных Optionals.

Continue reading