{"action":"created","comment":{"url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/comments/37454900","id":37454900,"diff_hunk":"@@ -0,0 +1,381 @@\n+<!-- Generics / Data Structures -->\n+\n+Welcome back! [Last time](../Lesson One), we took a look at Swift's syntax and Xcode playgrounds. We touched _very_ briefly on the idea of types. \n+\n+Swift is a _strongly typed language_ and the type system is very robust. Combined with type inference, you can write expressive code without being repetitive. Many languages might define an integer variable as `int i = 0`, but in Swift, it's just `var i = 0`, and Swift figures out that `0` is an integer. \n+\n+In this lesson, we're going to take a whirlwind tour through Swift's different types:\n+\n+- Structs\n+- Classes\n+- Enums\n+- Tuples\n+\n+Finally, we'll take a deeper look at generics. Let's get started!\n+\n+----------------\n+\n+**Structs** in Swift are containers for other data, similar to structs in C. This is a valid Swift struct.\n+\n+```swift\n+struct Artist {\n+    let name: String\n+}\n+```\n+\n+What different from C, though, is Swift structs can also have functions on them. We'll see how shortly. \n+\n+Once we have our `Artist` struct, how can we instantiate it? Well, Swift provides structs with default initializers – sometimes called constructors. To create an artist, you'd do the following. \n+\n+```swift\n+let artist = Artist(name: \"Orta\")\n+```\n+\n+Very cool. If we added more fields to the `Artist` struct, we'd need to update our calls to the initializer. \n+\n+Structs can have functions on them, too. Consider the following `Artwork` struct. \n+\n+```swift\n+struct Artwork {\n+    let name: String\n+    let artist: Artist\n+\n+    func getArtistName() -> String {\n+        return artist.name\n+    }\n+}\n+```\n+\n+It has a function that returns the artwork's artist's name. It seems a bit silly to have that as a function, though, since it's really a computed property. Swift let's us define those, too. \n+\n+```swift\n+struct Artwork {\n+    let name: String\n+    let artist: Artist\n+\n+    var artistName: String {\n+        get {\n+            return artist.name\n+        }\n+    }\n+}\n+```\n+\n+Not bad, but we can do better. Computed properties can have getters and setters, specified with `get` and `set`. But since read-only computed properties are so common, Swift has shorthad syntax. \n+\n+```swift\n+var artistName: String {\n+    return artist.name\n+}\n+```\n+\n+Nice. Let's take a look at classes next. \n+\n+A **class** in Swift is very similar to a struct, but also very different. The following **will not** work. \n+\n+```swift\n+class MyClass {\n+    var property: String\n+}\n+```\n+\n+Unlike with structs, Swift doesn't infer initializers for classes. This leaves us with two options: \n+\n+- Set all properties of the class to some initial value (pointless for constant properties like this one).\n+- Create an initializer that sets the properties before calling the superclass' initializer, if applicable.\n+\n+Swift's compiler enforces these rules for safety. Our class would need to look like this:\n+\n+```swift\n+class MyClass {\n+    var property = \"\"\n+}\n+```\n+\n+Or this:\n+\n+```swift\n+class MyClass {\n+    var property: String\n+\n+    init(property: String) {\n+        self.property = property\n+    }\n+}\n+```\n+\n+That's a lot of boilerplate for not a lot of anything. \n+\n+Classes are kind of a holdover from Objective-C, which didn't have Swift's concept of structs. Let's take a look at the different semantics around the difference between them. \n+\n+First we'll need a test struct. \n+\n+```swift\n+struct MyStruct {\n+    var property = \"\"\n+}\n+```\n+Simple enough – it has a variable property. Now try typing the following.\n+\n+```swift\n+let a = MyClass()\n+let b = MyStruct()\n+\n+a.property = \"Hi\"\n+b.property = \"Hi\"\n+```\n+\n+You'll get a compiler error on the last line :boom: Why do you think that is?\n+\n+Well, structs in Swift are _value types_, meaning that a change to the property of `b` is a change to `b` itself. Since we defined `b` as a `let` constant, we can't do that. `a` doesn't care because Swift classes are _reference types_. Changing the property of a class doesn't change the class itself. \n+\n+So let's change `b` to be a `var`. We can access these properties and they should both be `\"Hi\"`.\n+\n+Now let's get weirder. Let's create two new variables assigned to `a` and `b`.\n+\n+```swift\n+a2.property = \"Hello\"\n+b2.property = \"Hello\"\n+```\n+\n+What do you think happened to `a` and `b`? Let's check it out. \n+\n+![Surprising?](img/whoa.png)\n+\n+`a`, which is a class, had its property changed when we changed `a2`'s property. But `b` is the same. Why?\n+\n+Well, `a2` is a _reference_ to the same object as `a`. But `b2` is actually its own _value_, so changing it doesn't affect the original `b` at all. Swift manages this through _copy-on-write_ semantics that provides this sort of value-based immutability with the efficiency of reference typed-classes.\n+\n+In Swift, we prefer structs to classes. However, Swift often has to interoperate with Objective-C (the operating system, frameworks, and most open source code is all sadly still Objective-C). So we use classes, too. \n+\n+Alright, enough with that. Let's check out something really neat: enums. \n+\n+An **enum** is a type that has one of a certain number values, defined at compile time. You might be familiar with them from C or Java. \n+\n+```swift\n+enum MyEnum {\n+    case FirstOption, SecondOption\n+    case ThirdOption\n+}\n+```\n+\n+We can use enums with the following syntax. \n+\n+```swift\n+let e = MyEnum.FirstOption\n+\n+switch e {\n+case .FirstOption:\n+    print(\"first\")\n+case .SecondOption:\n+    print(\"second\")\n+case .ThirdOption:\n+    print(\"third\")\n+}\n+```\n+\n+Super cool! And of course, Swift makes sure that our `switch` statement is exhaustive. \n+\n+In C, all enums are integers. That is not true in Swift – this one has _no_ underlying type. You can't cast `MyEnum` values into anything else. But we could add an underlying value if we want. \n+\n+```swift\n+enum MyIntEnum: Int {\n+    case FirstOption = 0\n+    case SecondOption // inferred to be 1, and so on\n+    case ThirdOption\n+}\n+```\n+\n+So now we have a few neat things we can do. \n+\n+```swift\n+print(MyIntEnum.FirstOption.rawValue)\n+```\n+\n+This will print `0`, because that's `FirstOption`'s underlying value. We can also create `MyIntEnum` from raw integers, too. \n+\n+```swift\n+let value = MyIntEnum(rawValue: 0)\n+```\n+\n+However, because the initializer for `MyIntEnum` may fail if we pass in a value other than 0, 1, or 2, the type of `value` here is an _optional_. Specifically, `MyIntEnum?`. We learnt last time that we can unwrap optionals safely:\n+\n+```swift\n+if let value = MyIntEnum(rawValue: 0) {\n+    // value is now a (non-optional) MyIntEnum\n+}\n+```\n+\n+Neat. Swift also does something neat with enums that have underlying `String` values. \n+\n+```swift\n+enum MyStringEnum: String {\n+    case FirstOption\n+}\n+\n+print(MyStringEnum.FirstOption.rawValue) // Prints \"FirstOption\"\n+```\n+\n+Unless otherwise specified, Swift infers that enums backed by strings should have raw values identical to their labels. Cool!\n+\n+All of this is cool, I guess, but not Earth-shattering. Lots of other languages use enums this way. But Swift enums get _way_ cooler – they're probably my favourite feature. \n+\n+Enum cases can have _associated values_. Let's see how they work with an example. \n+\n+We need a `Result` enum that indicates whether an operation succeeded or failed. But we'd also like to know _why_ it failed. We _could_ approach this problem like this:\n+\n+```swift\n+enum Result {\n+    case Success\n+    case FailureDivisionByZero\n+    case Failure404StatusCode\n+    case FailureOutOfBounds\n+    ... and so on\n+}\n+```\n+\n+This sucks! And we need to know _all_ the possible ways something could fail at compile-time, which is often impossible. \n+\n+What we'd really like is to indicate that a failure occured, with an explanation of _why_ it failed. We can do this with associated values!\n+\n+```swift\n+enum Result {\n+    case Success\n+    case Failure(reason: String)\n+}\n+```\n+\n+Let's imagine the following function. \n+\n+```swift\n+func performAction(input: Int) -> Result {\n+    if input == 0 {\n+        return .Failure(reason: \"Invalid input\")\n+    } else {\n+        return .Success\n+    }\n+}\n+```\n+\n+It takes an input and if it's zero, it returns `.Failure` with a message about _why_ it failed. Otherwise it returns `.Success`. It's a pedagogical example – we don't need anything completex. \n+\n+How would we call this? Well, this is where `switch` statements come in handy:\n+\n+```swift\n+switch performAction(0) {\n+case .Success:\n+    print(\"Success!\")\n+case .Failure(let reason):\n+    print(\"Failure: \\(reason)\")\n+}\n+```\n+\n+The `switch` lets us access the value associated with the `.Failure` case, and bind that value to a local `reason` variable. Really cool!\n+\n+This is a pretty pedagogical example, but you can get a glimpse of the awesomeness of associated objects. We built an [entire network library](https://github.com/Moya/Moya) using them!\n+\n+Phew! That's a lot of stuff. One last thing: tuples. **Tuples** are simple structures – they are multiple values wrapped into a single value, and are defined using parentheses. This is a simple tuple. \n+\n+```swift\n+let tuple = (\"This is a value\", 1)\n+```\n+\n+In this example, `tuple` is of type `(String, Int)`. We can access the members of tuples using dot notation. \n+\n+```swift\n+let tuple = (\"This is a value\", 1)\n+tuple.0\n+tuple.1\n+```\n+\n+Gross. Let's use a _named_ tuple instead. \n+\n+```swift\n+let namedTuple = (stringValue: \"This is a value\", intValue: 1)\n+namedTuple.stringValue // \"This is a value\"\n+namedTuple.intValue // 1\n+```\n+\n+Note that this tuple is a _different type_ from the first one. It's `(String, Int)` compared with `(stringValue: String, intValue: Int)`. Yes, the labels in the tuples make them _different types_. \n+\n+----------------\n+\n+OK, so all of this has really been discussing **generics** – one of the biggest missing pieces in Objective-C. \n+\n+Generics let you specify that you're going to operate on a type without specifying _what_ type that is. Arrays are generics, for example. They hold stuff – anything, actually. We can do something similar. \n+\n+Let's look at an easy one. \n+\n+```swift\n+func doSomething<T>(input: T) -> T {\n+    return input\n+}\n+```\n+\n+This is a really silly function – all it does is return what you give it. But it's declaration is interesting. The angle brackets mean that it works on a generic, named `T`. We can name it whatever we want, though. \n+\n+The parameter `input` is of type `T`, even though we don't know what that is right now. Also, the function has to return something else of type `T`. We can all this function with nearly anything:\n+\n+```swift\n+doSomething(\"hi\")\n+doSomething(1234)\n+doSomething([1,2,3,4])\n+```\n+\n+(Calling `doSomething(nil)` won't work, though. Can you guess why?)\n+\n+Let's do something cooler. Let's build a simple stack datastructure. \n+\n+```swift\n+struct Stack<T> {\n+    private var contents = Array<T>()\n+\n+    mutating func push(input: T) {\n+        contents.append(input)\n+    }\n+\n+    mutating func pop() -> T? {\n+        return isEmpty() ? nil : contents.removeFirst()\n+    }\n+\n+    func isEmpty() -> Bool {\n+        return contents.count == 0\n+    }\n+}\n+```\n+\n+Neat, so now we have a stack. It holds an internal array called `contents`, and that array holds `T` (whatever that is). We can push, pop, and ask if the stack is empty. ","path":"Informed/Lesson Two/README.md","position":351,"original_position":347,"commit_id":"bdbd00ecc64e2f8fa53ae750599f6e9346df81e6","original_commit_id":"cbe0f80510f49ad361fb12bcd391f5da3350dd73","user":{"login":"orta","id":49038,"avatar_url":"https://avatars.githubusercontent.com/u/49038?v=3","gravatar_id":"","url":"https://api.github.com/users/orta","html_url":"https://github.com/orta","followers_url":"https://api.github.com/users/orta/followers","following_url":"https://api.github.com/users/orta/following{/other_user}","gists_url":"https://api.github.com/users/orta/gists{/gist_id}","starred_url":"https://api.github.com/users/orta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/orta/subscriptions","organizations_url":"https://api.github.com/users/orta/orgs","repos_url":"https://api.github.com/users/orta/repos","events_url":"https://api.github.com/users/orta/events{/privacy}","received_events_url":"https://api.github.com/users/orta/received_events","type":"User","site_admin":false},"body":"nice example, short, concise and actually useful","created_at":"2015-08-19T19:08:41Z","updated_at":"2015-08-19T19:08:41Z","html_url":"https://github.com/orta/Swift-at-Artsy/pull/6#discussion_r37454900","pull_request_url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6","_links":{"self":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/comments/37454900"},"html":{"href":"https://github.com/orta/Swift-at-Artsy/pull/6#discussion_r37454900"},"pull_request":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6"}}},"pull_request":{"url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6","id":42848908,"html_url":"https://github.com/orta/Swift-at-Artsy/pull/6","diff_url":"https://github.com/orta/Swift-at-Artsy/pull/6.diff","patch_url":"https://github.com/orta/Swift-at-Artsy/pull/6.patch","issue_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/6","number":6,"state":"open","locked":false,"title":"Rough draft of Informed Lesson Two.","user":{"login":"ashfurrow","id":498212,"avatar_url":"https://avatars.githubusercontent.com/u/498212?v=3","gravatar_id":"","url":"https://api.github.com/users/ashfurrow","html_url":"https://github.com/ashfurrow","followers_url":"https://api.github.com/users/ashfurrow/followers","following_url":"https://api.github.com/users/ashfurrow/following{/other_user}","gists_url":"https://api.github.com/users/ashfurrow/gists{/gist_id}","starred_url":"https://api.github.com/users/ashfurrow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ashfurrow/subscriptions","organizations_url":"https://api.github.com/users/ashfurrow/orgs","repos_url":"https://api.github.com/users/ashfurrow/repos","events_url":"https://api.github.com/users/ashfurrow/events{/privacy}","received_events_url":"https://api.github.com/users/ashfurrow/received_events","type":"User","site_admin":false},"body":"I was struct my inspiration. Focused mainly on getting the things in my brain written down before they lost me, so there's almost certainly room for improvement. \r\n\r\nAlso, I felt like the last lesson had far too little content – this is definitely a ramp-up. Let me know if you think we should cut anything. ","created_at":"2015-08-19T18:39:54Z","updated_at":"2015-08-19T19:08:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0dbfb34a9feb258e6179427b80a8387fefcbb3b0","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6/commits","review_comments_url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6/comments","review_comment_url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/6/comments","statuses_url":"https://api.github.com/repos/orta/Swift-at-Artsy/statuses/bdbd00ecc64e2f8fa53ae750599f6e9346df81e6","head":{"label":"orta:informed-lesson-two","ref":"informed-lesson-two","sha":"bdbd00ecc64e2f8fa53ae750599f6e9346df81e6","user":{"login":"orta","id":49038,"avatar_url":"https://avatars.githubusercontent.com/u/49038?v=3","gravatar_id":"","url":"https://api.github.com/users/orta","html_url":"https://github.com/orta","followers_url":"https://api.github.com/users/orta/followers","following_url":"https://api.github.com/users/orta/following{/other_user}","gists_url":"https://api.github.com/users/orta/gists{/gist_id}","starred_url":"https://api.github.com/users/orta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/orta/subscriptions","organizations_url":"https://api.github.com/users/orta/orgs","repos_url":"https://api.github.com/users/orta/repos","events_url":"https://api.github.com/users/orta/events{/privacy}","received_events_url":"https://api.github.com/users/orta/received_events","type":"User","site_admin":false},"repo":{"id":40609416,"name":"Swift-at-Artsy","full_name":"orta/Swift-at-Artsy","owner":{"login":"orta","id":49038,"avatar_url":"https://avatars.githubusercontent.com/u/49038?v=3","gravatar_id":"","url":"https://api.github.com/users/orta","html_url":"https://github.com/orta","followers_url":"https://api.github.com/users/orta/followers","following_url":"https://api.github.com/users/orta/following{/other_user}","gists_url":"https://api.github.com/users/orta/gists{/gist_id}","starred_url":"https://api.github.com/users/orta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/orta/subscriptions","organizations_url":"https://api.github.com/users/orta/orgs","repos_url":"https://api.github.com/users/orta/repos","events_url":"https://api.github.com/users/orta/events{/privacy}","received_events_url":"https://api.github.com/users/orta/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/orta/Swift-at-Artsy","description":"Repo for the notes for Swift at Artsy","fork":false,"url":"https://api.github.com/repos/orta/Swift-at-Artsy","forks_url":"https://api.github.com/repos/orta/Swift-at-Artsy/forks","keys_url":"https://api.github.com/repos/orta/Swift-at-Artsy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/orta/Swift-at-Artsy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/orta/Swift-at-Artsy/teams","hooks_url":"https://api.github.com/repos/orta/Swift-at-Artsy/hooks","issue_events_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/events{/number}","events_url":"https://api.github.com/repos/orta/Swift-at-Artsy/events","assignees_url":"https://api.github.com/repos/orta/Swift-at-Artsy/assignees{/user}","branches_url":"https://api.github.com/repos/orta/Swift-at-Artsy/branches{/branch}","tags_url":"https://api.github.com/repos/orta/Swift-at-Artsy/tags","blobs_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/refs{/sha}","trees_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/orta/Swift-at-Artsy/statuses/{sha}","languages_url":"https://api.github.com/repos/orta/Swift-at-Artsy/languages","stargazers_url":"https://api.github.com/repos/orta/Swift-at-Artsy/stargazers","contributors_url":"https://api.github.com/repos/orta/Swift-at-Artsy/contributors","subscribers_url":"https://api.github.com/repos/orta/Swift-at-Artsy/subscribers","subscription_url":"https://api.github.com/repos/orta/Swift-at-Artsy/subscription","commits_url":"https://api.github.com/repos/orta/Swift-at-Artsy/commits{/sha}","git_commits_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/commits{/sha}","comments_url":"https://api.github.com/repos/orta/Swift-at-Artsy/comments{/number}","issue_comment_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/comments{/number}","contents_url":"https://api.github.com/repos/orta/Swift-at-Artsy/contents/{+path}","compare_url":"https://api.github.com/repos/orta/Swift-at-Artsy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/orta/Swift-at-Artsy/merges","archive_url":"https://api.github.com/repos/orta/Swift-at-Artsy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/orta/Swift-at-Artsy/downloads","issues_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues{/number}","pulls_url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls{/number}","milestones_url":"https://api.github.com/repos/orta/Swift-at-Artsy/milestones{/number}","notifications_url":"https://api.github.com/repos/orta/Swift-at-Artsy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/orta/Swift-at-Artsy/labels{/name}","releases_url":"https://api.github.com/repos/orta/Swift-at-Artsy/releases{/id}","created_at":"2015-08-12T15:45:26Z","updated_at":"2015-08-19T18:30:56Z","pushed_at":"2015-08-19T19:02:03Z","git_url":"git://github.com/orta/Swift-at-Artsy.git","ssh_url":"git@github.com:orta/Swift-at-Artsy.git","clone_url":"https://github.com/orta/Swift-at-Artsy.git","svn_url":"https://github.com/orta/Swift-at-Artsy","homepage":null,"size":603,"stargazers_count":49,"watchers_count":49,"language":"Swift","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":1,"forks":2,"open_issues":1,"watchers":49,"default_branch":"master"}},"base":{"label":"orta:master","ref":"master","sha":"1c8d4a1fd3874514ac93b6f4f1866c97b42caa72","user":{"login":"orta","id":49038,"avatar_url":"https://avatars.githubusercontent.com/u/49038?v=3","gravatar_id":"","url":"https://api.github.com/users/orta","html_url":"https://github.com/orta","followers_url":"https://api.github.com/users/orta/followers","following_url":"https://api.github.com/users/orta/following{/other_user}","gists_url":"https://api.github.com/users/orta/gists{/gist_id}","starred_url":"https://api.github.com/users/orta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/orta/subscriptions","organizations_url":"https://api.github.com/users/orta/orgs","repos_url":"https://api.github.com/users/orta/repos","events_url":"https://api.github.com/users/orta/events{/privacy}","received_events_url":"https://api.github.com/users/orta/received_events","type":"User","site_admin":false},"repo":{"id":40609416,"name":"Swift-at-Artsy","full_name":"orta/Swift-at-Artsy","owner":{"login":"orta","id":49038,"avatar_url":"https://avatars.githubusercontent.com/u/49038?v=3","gravatar_id":"","url":"https://api.github.com/users/orta","html_url":"https://github.com/orta","followers_url":"https://api.github.com/users/orta/followers","following_url":"https://api.github.com/users/orta/following{/other_user}","gists_url":"https://api.github.com/users/orta/gists{/gist_id}","starred_url":"https://api.github.com/users/orta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/orta/subscriptions","organizations_url":"https://api.github.com/users/orta/orgs","repos_url":"https://api.github.com/users/orta/repos","events_url":"https://api.github.com/users/orta/events{/privacy}","received_events_url":"https://api.github.com/users/orta/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/orta/Swift-at-Artsy","description":"Repo for the notes for Swift at Artsy","fork":false,"url":"https://api.github.com/repos/orta/Swift-at-Artsy","forks_url":"https://api.github.com/repos/orta/Swift-at-Artsy/forks","keys_url":"https://api.github.com/repos/orta/Swift-at-Artsy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/orta/Swift-at-Artsy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/orta/Swift-at-Artsy/teams","hooks_url":"https://api.github.com/repos/orta/Swift-at-Artsy/hooks","issue_events_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/events{/number}","events_url":"https://api.github.com/repos/orta/Swift-at-Artsy/events","assignees_url":"https://api.github.com/repos/orta/Swift-at-Artsy/assignees{/user}","branches_url":"https://api.github.com/repos/orta/Swift-at-Artsy/branches{/branch}","tags_url":"https://api.github.com/repos/orta/Swift-at-Artsy/tags","blobs_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/refs{/sha}","trees_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/orta/Swift-at-Artsy/statuses/{sha}","languages_url":"https://api.github.com/repos/orta/Swift-at-Artsy/languages","stargazers_url":"https://api.github.com/repos/orta/Swift-at-Artsy/stargazers","contributors_url":"https://api.github.com/repos/orta/Swift-at-Artsy/contributors","subscribers_url":"https://api.github.com/repos/orta/Swift-at-Artsy/subscribers","subscription_url":"https://api.github.com/repos/orta/Swift-at-Artsy/subscription","commits_url":"https://api.github.com/repos/orta/Swift-at-Artsy/commits{/sha}","git_commits_url":"https://api.github.com/repos/orta/Swift-at-Artsy/git/commits{/sha}","comments_url":"https://api.github.com/repos/orta/Swift-at-Artsy/comments{/number}","issue_comment_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/comments{/number}","contents_url":"https://api.github.com/repos/orta/Swift-at-Artsy/contents/{+path}","compare_url":"https://api.github.com/repos/orta/Swift-at-Artsy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/orta/Swift-at-Artsy/merges","archive_url":"https://api.github.com/repos/orta/Swift-at-Artsy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/orta/Swift-at-Artsy/downloads","issues_url":"https://api.github.com/repos/orta/Swift-at-Artsy/issues{/number}","pulls_url":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls{/number}","milestones_url":"https://api.github.com/repos/orta/Swift-at-Artsy/milestones{/number}","notifications_url":"https://api.github.com/repos/orta/Swift-at-Artsy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/orta/Swift-at-Artsy/labels{/name}","releases_url":"https://api.github.com/repos/orta/Swift-at-Artsy/releases{/id}","created_at":"2015-08-12T15:45:26Z","updated_at":"2015-08-19T18:30:56Z","pushed_at":"2015-08-19T19:02:03Z","git_url":"git://github.com/orta/Swift-at-Artsy.git","ssh_url":"git@github.com:orta/Swift-at-Artsy.git","clone_url":"https://github.com/orta/Swift-at-Artsy.git","svn_url":"https://github.com/orta/Swift-at-Artsy","homepage":null,"size":603,"stargazers_count":49,"watchers_count":49,"language":"Swift","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":1,"forks":2,"open_issues":1,"watchers":49,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6"},"html":{"href":"https://github.com/orta/Swift-at-Artsy/pull/6"},"issue":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/6"},"comments":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/issues/6/comments"},"review_comments":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6/comments"},"review_comment":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/pulls/6/commits"},"statuses":{"href":"https://api.github.com/repos/orta/Swift-at-Artsy/statuses/bdbd00ecc64e2f8fa53ae750599f6e9346df81e6"}}}}