• Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
  • Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
  • Table View実装チュートリアルをXcode7.2.1で解説
  • Core Data シンプルチュートリアル
  • 私の本業、オフィシャルなブログ-> Life-LOG

今日はiOS内のデータを外部に書き出す機能について考えます。実はこの機能、私のアプリに必須です。

www.raywenderlich.com

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)
"
  }
}

「@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)
"
  }

Entityはオプショナルで「nil」を取り得ますが、CSV形式にする時にnilは許されません。nilを空欄""に変更するCoalescing Operator*2を使います。この「csv()」メソッドを呼べばCSVファイルが作られますね。

今日はここまで。

*1:CSV形式とは、文字列を「,」で区切ったリストです。表形式のデータの基本になります。

*2:この説明は次をみてください→Swiftで遊ぼう! - 285 - 備忘録 「a ? b : c」と「a ?? b」 - Swiftで遊ぼう! on Hatena