В Swift можно использовать тип Either<A, B>. Это позволит нам вернуть пользователю объект как в случае, если все проходит успешно, так и в случае возникновения ошибки. В Swift можно так реализовать тип Either<A, B>:
enum Either<A, B> {
case Left(A)
case Right(B)
}
Мы можем использовать Either<NSError, User> в качестве типа, который на финальном этапе преобразований может быть обработан так:
switch either {
case let .Left(error):
// показываем сообщение об ошибке (error)
case let .Right(user):
// делаем что-то с user
}
Мы немного упростили это, предполагая, что Left всегда будет NSError.
Вместо этого используется подобный, но другой тип Result <A>, который будет содержать либо значение, которое мы ищем, либо ошибку. Его реализация выглядит так:
enum Result<A> {
case Error(NSError)
case Value(A)
}
В настоящий момент в Swift перечисления enum не могут быть дженериками (generic) на самом топовом уровне, но, могут быть представлены как generic, если их обернуть в «постоянный» class box:
final class Box<A> {
let value: A
init(_ value: A) {
self.value = value
}
}
enum Result<A> {
case Error(NSError)
case Value(Box<A>)
}
И финальное «раскрытие» result: Result <User> будет выглядеть так:
switch result {
case let .Error(error):
// показываем сообщение об ошибке (error)
case let .Value(boxedUser):
let user = boxedUser.value
// делаем что-то с user
}
Замечательная статья — плюсую.
Но это лишь самая первая статья Alexandros Salazar из серии блестящих статей, очень осторожно подводящих нас, пришедших из Objective-C и несведущих в основных концепциях функционального программирования, к понятиям Монады (Monads), Функторы, Аппликативные Функторы (Applicative Functors) и Каррирование (Currying) в Swift.
В заключительной статье The Culmination: Final Part (Кульминация — Финальная часть) он приходит к монадическим операторам, которые сейчас отсутствуют в Swift, но по мнению автора являются «Магическим будущим» Swift.
В моем арсенале семь его статей на эту тему.
Продолжайте выкладывать статьи Alexandros Salazar.
В этих статьях с целью краткости и простоты изложения приводится лишь набросок кода, иллюстрирующий ту или иную идею.
Поэтому я изучала его статьи с параллельным кодированием в Swift — «Управление ошибками и Optionals в Swift – интерпретация в коде».
А зачем ждать? Все работает. Есть книжка «Using Swift with Cocoa and Objective-C». Связи Swift c Objective-C отработаны более- менее. Весь Cocoa Touch API подстроен для доступа из Swift. Вперед. Ну а эстетика может подождать. Сам по себе Swift — замечательный.
Забыли задачу о Разборчивой невесте, известной в англоязычной литературе как «Secretary problem» или как «marriage problem», «sultan's dowry problem», «fussy suitor problem», «googol game» и как проблема наилучшего выбора.
Она впервые сформулирована Мартином Гарднером в 1960 году.
В 1963 году академик РАН Евгений Дынкин предложил решение этой задачи для частного случая. Общее решение было найдено Сабиром Гусейн-Заде в 1966 году.
Диссертация член-корреспондента РАН не безвестного Бориса Березовского на соискание ученой степени доктора наук, защищенная в 1983 году, является обобщением задачи о разборчивой невесте.
Согласна. Но сейчас держит Cocoa Touch, написанная на Objective-C: весь API оттуда. Если перепишут Cocoa Touch на Swift, то, возможно, будет другой API.
Вы имели ввиду каррированные функции ( curried functions).
Их можно реализовать в Swift двумя способами:
func add (i:Int, j:Int, k:Int, l:Int) -> Int {return(i + j + k + l)}
// 1- ый метод
func curry<A,B,C,D,R>(f: (A,B,C,D) -> R) -> A -> B -> C -> D -> R {
return { a in { b in { c in { d in f(a,b,c,d) } } } }
}
let sum4 = curry (add )
// 2- ый метод (curried function in Swift)
func sum4Swift(i: Int)(j:Int)(k: Int)(l:Int) -> Int {
return add(i, j, k, l)
}
sum4 (1)(2)(3)(5) // playground 11
sum4Swift (1)(j: 2)(k: 3)(l: 5) // playground 11
Swift — язык молодой (декларирован 4 июня 2014 года на WWDC — 2014) и пока все время меняется, даже концептуально. Есть проблемы и ограничения, но Apple team их устраняет от релиза к релизу. Пока, конечно, много критики, но уверена — все сделают в «лучшем » виде, хотя и не сразу.
Я бы не отнесла эту статью к разряду просто пересказа документации. В документации все есть, но в разных местах: часть — в Functions, часть (метод init) — в Classes and Structures, Enumerations. Для тех, кто пришел с Objective C, где все было просто, есть некоторая путаница, когда в методах нужно внешнее имя, а когда — нет. Здесь она собрала все в одном месте. Мне показалось это полезным. Кроме того, следует обратить внимание на автора поста Natasha Murashev — у нее очень интересные посты — короткие и по делу. И, вообще, она сейчас «звезда» Swift сообщества и выступает на всех Swift мероприятиях.
Нет, никакой «матрешки» нет. Каждый раз курс начинается с основ, но с учетом нововведений новой версии iOS. «Канва» курса (имеется ввиду основные разделы iOS) в основном сохраняется, но одни темы (например, iCloud) могут исчезать, а другие (Dynamic Animation) могут появляться. Меняются демонстрационные примеры и Задания (Assignments). Курс -«живой», но цель — научить вас программировать на iOS c основ, но при условии, что у вас есть хоть какой-то опыт программирования на других языках. В целом, курс — фантастический с точки зрения затраты времени и результата.
Да, конечно, это Стэнфорд сам выкладывает, описка по Фрейду. Это те же самые лекции, которые читаются студентам Стэнфорда — в этом-то их и ценность, там есть видео и слайды — все на английском (на моем сайте все эти ссылки приведены). Никаких конспектов Стэнфорд не дает, есть титры к лекциям.
Я на своем сайте разместила русскую версию конспекта лекций с встроенными русифицированными слайдами и хронометрированием по времени, чтобы у тех, кто не владеет английским свободно, создавалось впечатление полноценного присутствия на лекции.
Если вы свободно владеете английским и для вас не проблема понимания со слуха, наверно, для вас это менее интересно. Но участвуя в обучении типа «Сoding Together» и в группах типа Russian Study Group, я поняла, что есть много русскоговорящих студентов, которые хотят изучать программирование iOS, но язык не пускает. Мой сайт — для них. И хотя эти курсы для «продвинутых», курса начинается с очень подробного «разжевывания» основ программирования на iOS. Так что добро пожаловать начинающим.
Но не только!
Хотя я в программировании iOS 4 года, я получила очень много дополнительной информации с этих лекций, так как профессор открывает для вас много незнакомых нюансов и подходов. Конечно, если вы подробно изучаете его материалы, а не прослушали курс «в общих чертах».
Да, курсов по Swift — шквал. Но большей частью — это курсы для начинающих, особенно Udemy, а Стэнфордский курсы имеют уровень — advanced, продвинутый. Да и тема вовсе не Swift, а iOS 8, а будет ли Swift или (Swift + Objective-C ) или просто Objective-C?? — не знаю. Они выкладывают их на iTunes совершенно бесплатно. Такого уровня и объема другие бесплатные курсы по iOS мне не известны.
Either<A, B>
. Это позволит нам вернуть пользователю объект как в случае, если все проходит успешно, так и в случае возникновения ошибки. В Swift можно так реализовать типEither<A, B>
:Мы можем использовать
Either<NSError, User>
в качестве типа, который на финальном этапе преобразований может быть обработан так:Мы немного упростили это, предполагая, что
Left
всегда будетNSError
.Вместо этого используется подобный, но другой тип
Result <A>
, который будет содержать либо значение, которое мы ищем, либо ошибку. Его реализация выглядит так:В настоящий момент в Swift перечисления
enum
не могут быть дженериками (generic) на самом топовом уровне, но, могут быть представлены как generic, если их обернуть в «постоянный» class box:И финальное «раскрытие»
result: Result <User>
будет выглядеть так:Но это лишь самая первая статья Alexandros Salazar из серии блестящих статей, очень осторожно подводящих нас, пришедших из Objective-C и несведущих в основных концепциях функционального программирования, к понятиям Монады (Monads), Функторы, Аппликативные Функторы (Applicative Functors) и Каррирование (Currying) в Swift.
В заключительной статье The Culmination: Final Part (Кульминация — Финальная часть) он приходит к монадическим операторам, которые сейчас отсутствуют в Swift, но по мнению автора являются «Магическим будущим» Swift.
В моем арсенале семь его статей на эту тему.
Продолжайте выкладывать статьи Alexandros Salazar.
В этих статьях с целью краткости и простоты изложения приводится лишь набросок кода, иллюстрирующий ту или иную идею.
Поэтому я изучала его статьи с параллельным кодированием в Swift — «Управление ошибками и Optionals в Swift – интерпретация в коде».
Она впервые сформулирована Мартином Гарднером в 1960 году.
В 1963 году академик РАН Евгений Дынкин предложил решение этой задачи для частного случая. Общее решение было найдено Сабиром Гусейн-Заде в 1966 году.
Диссертация член-корреспондента РАН не безвестного Бориса Березовского на соискание ученой степени доктора наук, защищенная в 1983 году, является обобщением задачи о разборчивой невесте.
Их можно реализовать в Swift двумя способами:
«Эффективный JSON c функциональными концепциями и дженериками в Swift.» (перевод) — оригинал «Efficient JSON in Swift with Functional Concepts and Generics».
«Реальный мир парсинга JSON.» (перевод) — оригинал «Real World JSON Parsing with Swift.»
«Парсинг вложенных JSON и массивов в Swift.» (перевод) — оригинал «Parsing Embedded JSON and Arrays in Swift.»
Но вас-то что раздражает?
Методы выглядят абсолютно одинаково, что в Swft, что в Objective-C
<img src="" alt=«image»/>
Я на своем сайте разместила русскую версию конспекта лекций с встроенными русифицированными слайдами и хронометрированием по времени, чтобы у тех, кто не владеет английским свободно, создавалось впечатление полноценного присутствия на лекции.
Если вы свободно владеете английским и для вас не проблема понимания со слуха, наверно, для вас это менее интересно. Но участвуя в обучении типа «Сoding Together» и в группах типа Russian Study Group, я поняла, что есть много русскоговорящих студентов, которые хотят изучать программирование iOS, но язык не пускает. Мой сайт — для них. И хотя эти курсы для «продвинутых», курса начинается с очень подробного «разжевывания» основ программирования на iOS. Так что добро пожаловать начинающим.
Но не только!
Хотя я в программировании iOS 4 года, я получила очень много дополнительной информации с этих лекций, так как профессор открывает для вас много незнакомых нюансов и подходов. Конечно, если вы подробно изучаете его материалы, а не прослушали курс «в общих чертах».