swift + json via wordpress

14
Swift + JSON via WordPress 中島真洋(ナカシマ マサヒロ) “SwiftyJSON”で簡単にJSONを扱う

Upload: masahiro-nakashima

Post on 14-Jul-2015

378 views

Category:

Devices & Hardware


4 download

TRANSCRIPT

Page 1: Swift + JSON via WordPress

Swift +

JSON via WordPress

中島真洋(ナカシマ マサヒロ)

“SwiftyJSON”で簡単にJSONを扱う

Page 2: Swift + JSON via WordPress

自己紹介

中島真洋(ナカシマ マサヒロ)出身:熊本県 FlipClap Inc. WEBデザイナー / エンジニア ブログ:着ぐるみ追い剥ぎペンギン(http://www.kigurumi.asia)

主な使用言語:PHP, JavaScript

アプリ開発経験:なし

Page 3: Swift + JSON via WordPress

サーバーとの連携アプリ

iPhone アプリ

特定のジャンルの 記事情報

WordPress

記事情報

RSS(XML)

Page 4: Swift + JSON via WordPress

WP REST API

XMLじゃなくて、JSONを使いたい!

今後のWordPressに組み込まれる予定 現在はプラグインとして配布中

Docs : http://wp-api.org/ Data : https://github.com/WP-API/WP-API

Page 5: Swift + JSON via WordPress

簡単にJSONで情報が取得できる

iPhone アプリ WordPress

記事情報

JSON

ex) 記事情報 http://ドメイン.com/wp-json/posts/ カテゴリー情報 http://ドメイン.com/wp-json/taxonomies/category/terms/1

Page 6: Swift + JSON via WordPress

表示したい情報

WordPressJSON

tableView

Page 7: Swift + JSON via WordPress

JSONの中身[ { "ID":44367, "title":"\u30e9\u30fc\u30e1\u30f3\u5c4b\u306e\u8b0e\u30eb\u30fc\u30eb\u591a\u30", "status":"publish", "type":"post", “content”:”...", //省略 "featured_image":{ "ID":44368, "title":"", "status":"inherit", //省略 "attachment_meta":{ "width":560, "height":420, "file":"2015\/01\/9b3e06a5-s.jpg", "sizes":{ //省略 "medium":{ "file":"9b3e06a5-s-300x225.jpg", "width":300, "height":225, "mime-type":"image\/jpeg", //↓ここ "url":"http:\/\/navi-blog.com\/wp-content\/uploads\/2015\/01\/9b3e06a5-s-300x225.jpg" } } //...

Page 8: Swift + JSON via WordPress

swiftで普通に書くと//セルの内容を表示 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //セルを取得 //var cell:UITableViewCell var cell = tableView.dequeueReusableCellWithIdentifier("news") as UITableViewCell //エントリーを取得 var entry = entries[indexPath.row] as NSDictionary //テキスト更新 var titleLabel = cell.viewWithTag(1) as UILabel titleLabel.text = entry["title"] as? String //サムネイル if let featuredImage = entry["featured_image"] as? NSDictionary { if let attachmentMeta = featuredImage["attachment_meta"] as? NSDictionary { if let attachmentSizes = attachmentMeta["sizes"] as? NSDictionary { if let attachmentMedium = attachmentSizes["medium"] as? NSDictionary { // イメージビューを取得して、画像を設定する var fileName = attachmentMedium["url"] as? String var fileUrl = NSURL(string: fileName!); var err: NSError?; var imageData :NSData = NSData(contentsOfURL: fileUrl!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; var img = UIImage(data: imageData) var imageView = cell.viewWithTag(2) as UIImageView imageView.image = img } } } } return cell }

Page 9: Swift + JSON via WordPress

もっと簡単にJSONが使いたい

SwiftyJSON https://github.com/SwiftyJSON/SwiftyJSON

参考: http://dev.classmethod.jp/smartphone/iphone/swiftyjson/ http://qiita.com/g08m11/items/c3746cbdbdb4c7b71607

Page 10: Swift + JSON via WordPress

インストール

ダウンロードして、「SwiftyJSON.swift」を追加するだけ

ここにドラッグでOK

Page 11: Swift + JSON via WordPress

SwiftyJSONを使うと

{ "ID":44367, "featured_image":{ "title":"AAAAA", }, }, { "ID":44368, "featured_image":{ “title":"BBBB", }, }

var entry = entries[indexPath.row] as NSDictionary if let featuredImage = entry["featured_image"] as? NSDictionary { var text = featuredImage["title"] as? String }

var text = entries[indexPath.row]["featured_image"]["title"].string

↓これが

↓こう書ける

entries.json

Page 12: Swift + JSON via WordPress

JSONだと

// var entries = NSArray() ↓ var entries: JSON = JSON.nullJSON

//var dict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSArray //self.entries = dict ↓ self.entries = JSON(data: data)

// //エントリーを取得 // var entry = entries[indexPath.row] as NSDictionary // // //テキスト更新 // var titleLabel = cell.viewWithTag(1) as UILabel // titleLabel.text = entry["title"] as? String ↓ var titleLabel = cell.viewWithTag(1) as UILabel titleLabel.text = entries[indexPath.row]["title"].string

Page 13: Swift + JSON via WordPress

JSONだと

// //サムネイル // if let featuredImage = entry["featured_image"] as? NSDictionary { // if let attachmentMeta = featuredImage["attachment_meta"] as? NSDictionary { // if let attachmentSizes = attachmentMeta["sizes"] as? NSDictionary { // if let attachmentMedium = attachmentSizes["medium"] as? NSDictionary { // // // イメージビューを取得して、画像を設定する // var fileName = attachmentMedium["url"] as? String // var fileUrl = NSURL(string: fileName!); // var err: NSError?; // var imageData :NSData = NSData(contentsOfURL: fileUrl!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; // // var img = UIImage(data: imageData) // var imageView = cell.viewWithTag(2) as UIImageView // imageView.image = img // // } // } // } // } // イメージビューを取得して、サムネイル画像を設定する var fileName:String? = entries[indexPath.row]["featured_image"]["attachment_meta"]["sizes"]["medium"]["url"].string if fileName != nil { var fileUrl = NSURL(string: fileName!); var err: NSError?; var imageData :NSData = NSData(contentsOfURL: fileUrl!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; var img = UIImage(data: imageData) var imageView = cell.viewWithTag(4) as UIImageView imageView.image = img }

Page 14: Swift + JSON via WordPress

おわり

・JSONを扱うなら、SwiftyJSONが便利