Share
Embed
Introducing APIKit
Yosuke Ishikawa
March 12, 2015
Transcript
33 slides
-
let path = "/search/repositories" let parameters = [ "q": "APIKit",
"sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } -
let path = "/search/repositories" let parameters = [ "q": "APIKit",
"sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ΤϯυϙΠϯτ͕ଘࡏ͢Δ͔ෆ໌ -
let path = "/search/repositories" let parameters = [ "q": "APIKit",
"sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ύϥϝʔλʔʹ ԿͰಥͬࠐΊΔ -
let path = "/search/repositories" let parameters = [ "q": "APIKit",
"sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ྆ํoptionalͳͷͰ4ύλʔϯ -
let path = "/search/repositories" let parameters = [ "q": "APIKit",
"sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ྆ํoptionalͳͷͰ4ύλʔϯ JSON Error .None .None .None .Some .Some .None .Some .Some -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ΤϯυϙΠϯτ͕ิ͞ΕΔ -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ύϥϝʔλʔΛܕͰ੍ݶ -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ύϥϝʔλʔΛܕͰ੍ݶ ✓ enum͑Δ -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ݁Ռ2ύλʔϯ -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ݁Ռ2ύλʔϯ ✓ ཏੑ໌Β͔ -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ΛऔΓग़ͤΔ -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ΛऔΓग़ͤΔ ✓ ͷܕϦΫΤετ͔Βਪ͞ΕΔ -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ΛऔΓग़ͤΔ ✓ ͷܕϦΫΤετ͔Βਪ͞ΕΔ [Repository] -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ΛऔΓग़ͤΔ ✓ ͷܕϦΫΤετ͔Βਪ͞ΕΔ [Repository] ✓ ࣦഊ࣌NSError͕ೖΔ NSError -
let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request)
{ response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ΛऔΓग़ͤΔ ✓ ͷܕϦΫΤετ͔Βਪ͞ΕΔ [Repository] ✓ ࣦഊ࣌NSError͕ೖΔ NSError LlamaKit.Result<T.Response, NSError> -
public protocol Request { typealias Response: Any var URLRequest: NSURLRequest?
{ get } func responseFromObject(object: AnyObject) -> Response? } Requestϓϩτίϧʹ ద߹͢Εྃ -
public protocol Request { typealias Response: Any var URLRequest: NSURLRequest?
{ get } func responseFromObject(object: AnyObject) -> Response? } Requestϓϩτίϧʹ ద߹͢Εྃ ֤ΤϯυϙΠϯτͷఆٛ1ՕॴͰࡁΉ -
class SearchRepositories: APIKit.Request { enum Sort: String { case Stars
= "stars" case Forks = "forks" case Updated = "updated" } enum Order: String { case Ascending = "asc" case Descending = "desc" } typealias Response = [Repository] let query: String let sort: Sort let order: Order var URLRequest: NSURLRequest? { return GitHub.URLRequest(.GET, "/search/repositories", [ "q": query, "sort": sort.rawValue, "order": order.rawValue ]) } init(query: String, sort: Sort = .Stars, order: Order = .Ascending) { self.query = query self.sort = sort self.order = order } }