Swiftで遊ぼう! - 608 - Multiple Managed Object Contextsチュートリアル 12
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- Table View実装チュートリアルをXcode7.2.1で解説
- Core Data シンプルチュートリアル
- 私の本業、オフィシャルなブログ-> Life-LOG
今日はiOS内のデータを外部に書き出す機能について考えます。実はこの機能、私のアプリに必須です。
Core Dataで重要なCoreDataStackのコードを見てきましたが、データの実体はManagedObject型です。ということでNSManagedObjectクラスを継承したクラスを用意する必要があります。このスタータープロジェクトをみると「JournalEntity.swift」というファイルがありました。
import Foundation import CoreData class JournalEntry: NSManagedObject { @NSManaged var date: NSDate? @NSManaged var height: String? @NSManaged var period: String? @NSManaged var wind: String? @NSManaged var location: String? @NSManaged var rating: NSNumber? func stringForDate() -> String { let dateFormatter = NSDateFormatter() dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle if let date = date { return dateFormatter.stringFromDate(date) } else { return "" } } func csv() -> String { let coalescedHeight = height ?? "" let coalescedPeriod = period ?? "" let coalescedWind = wind ?? "" let coalescedLocation = location ?? "" var coalescedRating:String if let rating = rating?.intValue { coalescedRating = String(rating) } else { coalescedRating = "" } return "\(stringForDate()),\(coalescedHeight)," + "\(coalescedPeriod),\(coalescedWind)," + "\(coalescedLocation),\(coalescedRating)\n" } }
「@NNManaged」枕詞の説明が必要な人は次のページを読むといいでしょう。
yataiblue.hatenablog.com
実はこのクラス宣言内に「CSV」形式*1のファイル書き出しのためのメソッドを用意しています。それが「csv()」です。
func csv() -> String { let coalescedHeight = height ?? "" let coalescedPeriod = period ?? "" let coalescedWind = wind ?? "" let coalescedLocation = location ?? "" var coalescedRating:String if let rating = rating?.intValue { coalescedRating = String(rating) } else { coalescedRating = "" } return "\(stringForDate()),\(coalescedHeight)," + "\(coalescedPeriod),\(coalescedWind)," + "\(coalescedLocation),\(coalescedRating)\n" }
Entityはオプショナルで「nil」を取り得ますが、CSV形式にする時にnilは許されません。nilを空欄""に変更する
今日はここまで。
*1:CSV形式とは、文字列を「,」で区切ったリストです。表形式のデータの基本になります。
*2:この説明は次をみてください→Swiftで遊ぼう! - 285 - 備忘録 「a ? b : c」と「a ?? b」 - Swiftで遊ぼう! on Hatena