Swiftをはじめて1ヶ月あたりでアプリを作ってみた。
その中でどうせならRailsと連携してDBを使いたかったので、導入してみたときの記録。
今回はHTTP通信部分(GET・POST)の記述のみを簡単に紹介。
ちなみにRailsはscaffoldでさくっと作成。
.json.jbuilderのひな形みたいなのも作ってくれたのでよかった。
データ受信(GET)
Swift側
ViewController/HomeTableViewController.swift
func loadDiaries() {
let url = NSURL(string: "http://localhost:4000/diaries.json")
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "GET"
var task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, responce, error) -> Void in
if (error == nil) {
self.diaries.removeAll(keepCapacity: false)
var diaries = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! Array<Dictionary<String, AnyObject>>
for diaryInfo in diaries {
let diary = Diary(attributes: diaryInfo)
self.diaries.append(diary)
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
} else {
// when error
}
})
task.resume()
}
Rails側
views/diaries/index.json.jbuilder
json.array!(@diaries) do |diary|
json.extract! diary, :id, :name, :title, :text, :created_at
json.url diary_url(diary, format: :json)
end
データ送信(POST)
簡単にいうと、
配列にデータをいれて、URLとHTTPメソッドを指定して送るだけ。
Swift側
ViewController/NewDiaryViewController.swift
func save() {
var url = NSURL(string: "http://localhost:4000/diaries")
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
var params: [String: AnyObject] = [
"name": "ただち",
"title": titleField.text,
"text": textField.text
]
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: nil)
var task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
if (error == nil) {
var result = NSString(data: data, encoding: NSUTF8StringEncoding)!
}
})
task.resume()
close()
}
保存ボタンを押したときこのメソッドが走るように設定。
Rails側にSwift用の記述はしなくて大丈夫です。
その他
プロジェクトは以下。
https://github.com/yuta-t/today
制作期間2日くらい。