Это перевод статьи Tony DiPasquale [«Efficient JSON in Swift with Functional Concepts»][1].  
  Передо мной была поставлена задача: закачать данные в формате JSON с [Flickr.com][2] о 100 топ местах, в которых сделаны фотографии на данный момент, в массив моделей:  
struct Places {
    var places : [Place]
}
struct Place {
    let placeURL: NSURL
    let timeZone: String
    let photoCount : Int
    let content : String
}
  Кроме чисто прагматической задачи, мне хотелось посмотреть как в _Swift _работает «вывод типа из контекста» (type Inference), какие возможности _Swift_ в функциональном программировании, и я выбрала для парсинга JSON алгоритмы из статьи Tony DiPasquale [«Efficient JSON in Swift with Functional Concepts and Generics»][3], в которой он «протягивает» generic тип `Result` для обработки ошибок по всей цепочке преобразований: от запроса в сеть до размещения данных в массив Моделей для последующего представления в `UITableViewController`.  Чтобы посмотреть как _Swift _работает «в связке» с _Objective-C_, для считывания данных с [Flickr.com][4] использовался Flickr API, представленный в курсе Стэнфордского Университета [«Stanford CS 193P iOS 7»][5], написанный на _Objective-C_.  В результате помимо небольшого расширения Моделей: 
extension Place: JSONDecodable {
    static func create(placeURL: String)(timeZone: String)(photoCount: String)(content: String) -> Place {
        return Place(placeURL: toURL(placeURL), timeZone: timeZone, photoCount: photoCount.toInt() ?? 0, content: content)
    }
    static func decode(json: JSON) -> Place? {
        return _JSONParse(json) >>> { d in
            Place.create
                <^> d <| "place_url"
                <*> d <| "timezone"
                <*> d <| "photo_count"
                <*> d <| "_content"
        }
    }
}
extension Places: JSONDecodable {
    static func create(places: [Place]) -> Places {
        return Places(places: places)
    }
    static func decode(json: JSON) -> Places? {
        return _JSONParse(json) >>> { d in
            Places.create
                <^> d <| "places" <| "place"
        }
    }
}
  мне самостоятельно пришлось написать только три строчки кода: [Читать дальше →][6]
  [1]: 
http://robots.thoughtbot.com/efficient-json-in-swift-with-functional-concepts-and-generics
  [2]: 
https://www.flickr.com/
  [3]: 
http://robots.thoughtbot.com/efficient-json-in-swift-with-functional-concepts-and-generics
  [4]: 
https://www.flickr.com/
  [5]: 
http://web.stanford.edu/class/cs193p/cgi-bin/drupal/
  [6]: 
http://habrahabr.ru/post/244821/#habracut