docs
Directory actions
More options
Directory actions
More options
docs
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
<!DOCTYPE html>
<html lang="en">
<head>
<title>README Reference</title>
<link rel="stylesheet" type="text/css" href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fcss%2Fjazzy.css" />
<link rel="stylesheet" type="text/css" href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fcss%2Fhighlight.css" />
<meta charset="utf-8">
<script src="proxy.php?url=https%3A%2F%2Fgithub.com%2Fjs%2Fjquery.min.js" defer></script>
<script src="proxy.php?url=https%3A%2F%2Fgithub.com%2Fjs%2Fjazzy.js" defer></script>
</head>
<body>
<a title="README Reference"></a>
<header class="header">
<p class="header-col header-col--primary">
<a class="header-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2Findex.html">
Arrow Docs
</a>
(72% documented)
</p>
<p class="header-col header-col--secondary">
<a class="header-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/s4cha/Arrow">https://github.com/s4cha/Arrow">
<img class="header-icon" src="proxy.php?url=https%3A%2F%2Fgithub.com%2Fimg%2Fgh.png"/>
View on GitHub
</a>
</p>
</header>
<p class="breadcrumbs">
<a class="breadcrumb" href="proxy.php?url=https%3A%2F%2Fgithub.com%2Findex.html">Arrow Reference</a>
<img class="carat" src="proxy.php?url=https%3A%2F%2Fgithub.com%2Fimg%2Fcarat.png" />
README Reference
</p>
<div class="content-wrapper">
<nav class="navigation">
<ul class="nav-groups">
<li class="nav-group-name">
<a class="nav-group-name-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FGuides.html">Guides</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2Freadme.html">README</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FClasses.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FClasses%2FArrow.html">Arrow</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FClasses%2FJSON.html">JSON</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions.html">Functions</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions.html%23%2Fs%3AZF5Arrowoi3lssFTRCSo6NSDateGSqCS_4JSON__T_"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions.html%23%2Fs%3AZF5Arrowoi3lssFTRGSqCSo6NSDate_GSqCS_4JSON__T_"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions.html%23%2Fs%3AZF5Arrowoi3lssFTRCSo5NSURLGSqCS_4JSON__T_"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions.html%23%2Fs%3AZF5Arrowoi3lssFTRGSqCSo5NSURL_GSqCS_4JSON__T_"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FFunctions%2F%26amp%3Blt%3B--%28_%3A_%3A%29.html"><--(_:_:)</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a class="nav-group-name-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FProtocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a class="nav-group-task-link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2FProtocols%2FArrowParsable.html">ArrowParsable</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section class="section">
<div class="section-content">
<a href='#arrow-em-elegant-json-parsing-in-swift-em' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h1 id='arrow-em-elegant-json-parsing-in-swift-em'>Arrow 🏹 - <em>Elegant JSON Parsing in Swift</em></h1>
<p><a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://developer.apple.com/swift"><img" rel="nofollow">https://developer.apple.com/swift"><img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://img.shields.io/badge/language-swift2-f48041.svg?style=flat" rel="nofollow">https://img.shields.io/badge/language-swift2-f48041.svg?style=flat" alt="Language: Swift 2"></a>
<img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://img.shields.io/badge/platform-iOS%208%2B-blue.svg?style=flat" rel="nofollow">https://img.shields.io/badge/platform-iOS%208%2B-blue.svg?style=flat" alt="Platform: iOS 8+">
<a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/Carthage/Carthage"><img">https://github.com/Carthage/Carthage"><img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" rel="nofollow">https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible"></a>
<a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://cocoapods.org"><img" rel="nofollow">https://cocoapods.org"><img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://img.shields.io/badge/Cocoapods-compatible-4BC51D.svg?style=flat" rel="nofollow">https://img.shields.io/badge/Cocoapods-compatible-4BC51D.svg?style=flat" alt="Cocoapods compatible"></a>
<a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://www.bitrise.io/app/ffd8fe5df34624ff"><img" rel="nofollow">https://www.bitrise.io/app/ffd8fe5df34624ff"><img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://www.bitrise.io/app/ffd8fe5df34624ff.svg?token=IahWn-RB5hTWzvBbcIktsQ" rel="nofollow">https://www.bitrise.io/app/ffd8fe5df34624ff.svg?token=IahWn-RB5hTWzvBbcIktsQ" alt="Build Status"></a>
<a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://codebeat.co/projects/github-com-s4cha-arrow"><img" rel="nofollow">https://codebeat.co/projects/github-com-s4cha-arrow"><img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://codebeat.co/badges/2acb8664-02f7-463d-9de2-2be9e87ba17c" rel="nofollow">https://codebeat.co/badges/2acb8664-02f7-463d-9de2-2be9e87ba17c" alt="codebeat badge"></a>
<a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/s4cha/Arrow/blob/master/LICENSE"><img">https://github.com/s4cha/Arrow/blob/master/LICENSE"><img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat" rel="nofollow">http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat" alt="License: MIT"></a>
<a href=""><img src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://img.shields.io/badge/release-2.0-blue.svg" rel="nofollow">https://img.shields.io/badge/release-2.0-blue.svg" alt="Release version"></a></p>
<p><a href="#reason">Reason</a> - <a href="#example">Example</a> - <a href="#installation">Installation</a></p>
<pre class="highlight swift"><code><span class="n">identifier</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"id"</span><span class="p">]</span>
<span class="n">name</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"name"</span><span class="p">]</span>
<span class="n">stats</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"stats"</span><span class="p">]</span>
</code></pre>
<a href='#reason' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='reason'>Reason</h2>
<a href='#why' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='why'>Why</h3>
<p>Because parsing JSON in Swift is full of <strong>unecessary if lets, obvious casts and nil-checks</strong><br>
<em>There must be a better way</em></p>
<a href='#how' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='how'>How</h2>
<p>By using a simple arrow operator that takes care of the boilerplate code for us.<br>
Json mapping code becomes <strong>concise</strong> and <strong>maintainable</strong> ❤️</p>
<a href='#what' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='what'>What</h2>
<ul>
<li>[x] Simple & Lightweight (~200lines)</li>
<li>[x] Pure Swift</li>
<li>[x] Leaves your models clean</li>
<li>[x] Implicitly casts JSON values to the right types in your model</li>
<li>[x] Automatic NSDate, NSURL, Enum, Custom model Parsing</li>
<li>[x] Converts string values to numeric types in your model</li>
<li>[x] Does not crash if JSON key is not there, nor returns nil, it simply doesn’t do anything</li>
<li>[x] No overly complex obscure functional chaining operator overloading voodoo magic ?==:>>><> 😅</li>
</ul>
<a href='#example' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='example'>Example</h2>
<a href='#swift-model' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='swift-model'>Swift Model</h3>
<pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">Profile</span> <span class="p">{</span>
<span class="k">var</span> <span class="nv">identifier</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">var</span> <span class="nv">name</span> <span class="o">=</span> <span class="s">""</span>
<span class="k">var</span> <span class="nv">link</span><span class="p">:</span><span class="kt">NSURL</span><span class="p">?</span>
<span class="k">var</span> <span class="nv">weekday</span><span class="p">:</span><span class="kt">WeekDay</span> <span class="o">=</span> <span class="o">.</span><span class="kt">Monday</span>
<span class="k">var</span> <span class="nv">stats</span> <span class="o">=</span> <span class="kt">Stats</span><span class="p">()</span>
<span class="k">var</span> <span class="nv">phoneNumbers</span> <span class="o">=</span> <span class="p">[</span><span class="kt">PhoneNumber</span><span class="p">]()</span>
<span class="p">}</span>
</code></pre>
<a href='#json-file' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='json-file'>JSON File</h3>
<pre class="highlight json"><code><span class="p">{</span><span class="w">
</span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">15678</span><span class="p">,</span><span class="w">
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"John Doe"</span><span class="p">,</span><span class="w">
</span><span class="nt">"link"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://apple.com/steve"</span><span class="p">,</span><span class="w">
</span><span class="nt">"weekdayInt"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
</span><span class="nt">"stats"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nt">"numberOfFriends"</span><span class="p">:</span><span class="w"> </span><span class="mi">163</span><span class="p">,</span><span class="w">
</span><span class="nt">"numberOfFans"</span><span class="p">:</span><span class="w"> </span><span class="mi">10987</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nt">"phoneNumbers"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
</span><span class="nt">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"house"</span><span class="p">,</span><span class="w">
</span><span class="nt">"number"</span><span class="p">:</span><span class="w"> </span><span class="s2">"9809876545"</span><span class="w">
</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nt">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cell"</span><span class="p">,</span><span class="w">
</span><span class="nt">"number"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0908070656"</span><span class="w">
</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nt">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"work"</span><span class="p">,</span><span class="w">
</span><span class="nt">"number"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0916570656"</span><span class="w">
</span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
<a href='#before-chaos' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='before-chaos'>Before (Chaos)</h3>
<pre class="highlight swift"><code><span class="k">var</span> <span class="nv">profile</span> <span class="o">=</span> <span class="kt">Profile</span><span class="p">()</span>
<span class="c1">// Int</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">id</span> <span class="o">=</span> <span class="n">json</span><span class="p">[</span><span class="s">"id"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">Int</span> <span class="p">{</span>
<span class="n">profile</span><span class="o">.</span><span class="n">identifier</span> <span class="o">=</span> <span class="n">id</span>
<span class="p">}</span>
<span class="c1">// String</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">name</span> <span class="o">=</span> <span class="n">json</span><span class="p">[</span><span class="s">"name"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">String</span> <span class="p">{</span>
<span class="n">profile</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="p">}</span>
<span class="c1">// NSURL</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">link</span> <span class="o">=</span> <span class="n">json</span><span class="p">[</span><span class="s">"link"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">String</span><span class="p">,</span> <span class="n">url</span> <span class="o">=</span> <span class="kt">NSURL</span><span class="p">(</span><span class="nv">string</span><span class="p">:</span><span class="n">link</span><span class="p">)</span> <span class="p">{</span>
<span class="n">profile</span><span class="o">.</span><span class="n">link</span> <span class="o">=</span> <span class="n">link</span>
<span class="p">}</span>
<span class="c1">// Enum</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">weekdayInt</span> <span class="o">=</span> <span class="n">json</span><span class="p">[</span><span class="s">"weekdayInt"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">Int</span><span class="p">,</span> <span class="n">weekday</span> <span class="o">=</span> <span class="kt">WeekDay</span><span class="p">(</span><span class="nv">rawValue</span><span class="p">:</span><span class="n">weekdayInt</span><span class="p">)</span> <span class="p">{</span>
<span class="n">profile</span><span class="o">.</span><span class="n">weekday</span> <span class="o">=</span> <span class="n">weekday</span>
<span class="p">}</span>
<span class="c1">// Custom nested object</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">statsJson</span> <span class="o">=</span> <span class="n">json</span><span class="p">[</span><span class="s">"stats"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">AnyObject</span> <span class="p">{</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">numberOfFans</span> <span class="o">=</span> <span class="n">statsJson</span><span class="p">[</span><span class="s">"numberOfFans"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">Int</span> <span class="p">{</span>
<span class="n">profile</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">numberOfFans</span> <span class="o">=</span> <span class="n">numberOfFans</span>
<span class="p">}</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">numberOfFriends</span> <span class="o">=</span> <span class="n">statsJson</span><span class="p">[</span><span class="s">"numberOfFriends"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">Int</span> <span class="p">{</span>
<span class="n">profile</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">numberOfFriends</span> <span class="o">=</span> <span class="n">numberOfFriends</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="c1">// Array of custom nested object</span>
<span class="k">if</span> <span class="k">let</span> <span class="nv">pns</span> <span class="o">=</span> <span class="n">json</span><span class="p">[</span><span class="s">"phoneNumbers"</span><span class="p">]</span> <span class="k">as?</span> <span class="p">[</span><span class="kt">AnyObject</span><span class="p">]</span> <span class="p">{</span>
<span class="k">for</span> <span class="n">pn</span> <span class="k">in</span> <span class="n">pns</span> <span class="p">{</span>
<span class="n">phoneNumbers</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="kt">PhoneNumber</span><span class="p">(</span><span class="nv">json</span><span class="p">:</span> <span class="n">pn</span><span class="p">))</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<a href='#after' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='after'>After 🎉🎉🎉</h3>
<pre class="highlight swift"><code><span class="kd">extension</span> <span class="kt">Profile</span><span class="p">:</span><span class="kt">ArrowParsable</span> <span class="p">{</span>
<span class="k">mutating</span> <span class="kd">func</span> <span class="nf">deserialize</span><span class="p">(</span><span class="nv">json</span><span class="p">:</span> <span class="kt">JSON</span><span class="p">)</span> <span class="p">{</span>
<span class="n">identifier</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"id"</span><span class="p">]</span>
<span class="n">link</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"link"</span><span class="p">]</span>
<span class="n">name</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"name"</span><span class="p">]</span>
<span class="n">weekday</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"weekdayInt"</span><span class="p">]</span>
<span class="n">stats</span> <span class="o"><-</span> <span class="n">json</span><span class="p">[</span><span class="s">"stats"</span><span class="p">]</span>
<span class="n">phoneNumbers</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"phoneNumbers"</span><span class="p">]</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<a href='#usage' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='usage'>Usage</h3>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">profile</span> <span class="o">=</span> <span class="kt">Profile</span><span class="p">()</span>
<span class="n">profile</span><span class="o">.</span><span class="nf">deserialize</span><span class="p">(</span><span class="n">json</span><span class="p">)</span>
</code></pre>
<a href='#installation' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='installation'>Installation</h2>
<a href='#carthage' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h4 id='carthage'>Carthage</h4>
<pre class="highlight plaintext"><code>github "s4cha/Arrow"
</code></pre>
<a href='#cocoapods' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h4 id='cocoapods'>CocoaPods</h4>
<pre class="highlight plaintext"><code>pod 'Arrow'
use_frameworks!
</code></pre>
<a href='#manually' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h4 id='manually'>Manually</h4>
<p>Simply Copy and Paste Arrow.swift in your Xcode Project :)
<a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/s4cha/Arrow/blob/master/Arrow.swift">https://github.com/s4cha/Arrow/blob/master/Arrow.swift</a></p">https://github.com/s4cha/Arrow/blob/master/Arrow.swift">https://github.com/s4cha/Arrow/blob/master/Arrow.swift</a></p>
<a href='#as-a-framework' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h4 id='as-a-framework'>As A Framework</h4>
<p>Grab this repository and build the Framework target on the example project. Then Link against this framework.</p>
<a href='#how-does-that-work' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='how-does-that-work'>How Does That Work</h2>
<p>Notice earlier we typed :</p>
<pre class="highlight swift"><code><span class="n">stats</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"stats"</span><span class="p">]</span>
</code></pre>
<p>That’s because we created and extension <q>Stats+Arrow.swift</q> enabling us to use the Arrow Operator</p>
<pre class="highlight swift"><code><span class="c1">// Stats+Arrow.swift</span>
<span class="kd">import</span> <span class="kt">Foundation</span>
<span class="kd">extension</span> <span class="kt">Stats</span><span class="p">:</span><span class="kt">ArrowParsable</span> <span class="p">{</span>
<span class="k">mutating</span> <span class="kd">func</span> <span class="nf">deserialize</span><span class="p">(</span><span class="nv">json</span><span class="p">:</span> <span class="kt">JSON</span><span class="p">)</span> <span class="p">{</span>
<span class="n">numberOfFriends</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"numberOfFriends"</span><span class="p">]</span>
<span class="n">numberOfFans</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"numberOfFans"</span><span class="p">]</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<a href='#flexible-you-said' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='flexible-you-said'>Flexible you said</h2>
<ul>
<li>DO I have to use the <– for my sub models</li>
<li>Nope, you could write it like so if you wanted :</li>
</ul>
<pre class="highlight swift"><code><span class="n">stats</span><span class="o">.</span><span class="n">numberOfFriends</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"stats.numberOfFriends"</span><span class="p">]</span>
<span class="n">stats</span><span class="o">.</span><span class="n">numberOfFans</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"stats.numberOfFans"</span><span class="p">]</span>
</code></pre>
<ul>
<li>Hey I don’t want to parse NSDates in every files, do you have something for me?</li>
</ul>
<p>Sure, just set your date format once and you’re done.</p>
<pre class="highlight swift"><code><span class="c1">// Configure NSDate Parsing</span>
<span class="kt">Arrow</span><span class="o">.</span><span class="nf">setDateFormat</span><span class="p">(</span><span class="s">"yyyy-MM-dd'T'HH:mm:ssZZZZZ"</span><span class="p">)</span>
<span class="kt">Arrow</span><span class="o">.</span><span class="nf">setUseTimeIntervalSinceReferenceDate</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="c1">// Dates can be parsed form custom date format or timestamp</span>
<span class="k">let</span> <span class="nv">json</span><span class="p">:</span><span class="kt">JSON</span> <span class="o">=</span> <span class="kt">JSON</span><span class="p">([</span><span class="s">"date"</span><span class="p">:</span> <span class="s">"2013-06-07T16:38:40+02:00"</span><span class="p">,</span> <span class="s">"timestamp"</span><span class="p">:</span> <span class="mi">392308720</span><span class="p">])</span>
<span class="n">date1</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"date"</span><span class="p">]</span>
<span class="n">date2</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"timestamp"</span><span class="p">]</span>
</code></pre>
<p>What if I want a Custom NSDate format for a specific key ?
<code>swift
createdAt <-- json["created_at"]?.dateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
</code>
Just provide it on a case per case basis ! 🎉</p>
<a href='#accessing-json-values' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='accessing-json-values'>Accessing JSON values</h2>
<a href='#nested-values' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='nested-values'>Nested values</h3>
<pre class="highlight swift"><code><span class="n">value</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="s">"nested.nested.nested.nestedValue"</span><span class="p">]</span>
</code></pre>
<a href='#object-at-index' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='object-at-index'>Object at index</h3>
<pre class="highlight swift"><code><span class="n">value</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="mi">12</span><span class="p">]</span>
</code></pre>
<a href='#combine-both' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='combine-both'>Combine both</h3>
<pre class="highlight swift"><code><span class="n">value</span> <span class="o"><--</span> <span class="n">json</span><span class="p">[</span><span class="mi">1</span><span class="p">]?[</span><span class="s">"someKey"</span><span class="p">]?[</span><span class="mi">2</span><span class="p">]?[</span><span class="s">"something.other"</span><span class="p">]</span>
</code></pre>
<a href='#looping-on-array' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h3 id='looping-on-array'>Looping on Array</h3>
<pre class="highlight swift"><code><span class="k">if</span> <span class="k">let</span> <span class="nv">collection</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">collection</span> <span class="p">{</span>
<span class="k">for</span> <span class="n">jsonEntry</span> <span class="k">in</span> <span class="n">collection</span> <span class="p">{</span>
<span class="c1">//Do something</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<a href='#acknoledgments' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='acknoledgments'>Acknoledgments</h2>
<p>This wouldn’t exist without <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/YannickDot">YannickDot</a">https://github.com/YannickDot">YannickDot</a>, <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/damien-nd">Damien-nd</a">https://github.com/damien-nd">Damien-nd</a> and <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/maxkonovalov">maxkonovalov</a></p">https://github.com/maxkonovalov">maxkonovalov</a></p>
<a href='#other-repos' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='other-repos'>Other repos ❤️</h2>
<p>Arrow is part of a series of lightweight libraries aiming to make developing iOS Apps a <em>breeze</em> :
- Layout : <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/s4cha/Stevia">Stevia</a">https://github.com/s4cha/Stevia">Stevia</a>
- Async code : <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/s4cha/then">then</a">https://github.com/s4cha/then">then</a>
- JSON WebServices : <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/s4cha/ws">ws</a></p">https://github.com/s4cha/ws">ws</a></p>
</div>
</section>
</article>
</div>
<section class="footer">
<p>© 2016 <a class="link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/s4cha">https://github.com/s4cha" target="_blank" rel="external">S4cha</a>. All rights reserved. (Last updated: 2016-07-09)</p>
<p>Generated by <a class="link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"https://github.com/realm/jazzy">https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.7.0</a>, a <a class="link" href="proxy.php?url=https%3A%2F%2Fgithub.com%2F%3Ca+href%3D"http://realm.io" rel="nofollow">http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</body>
</div>
</html>