UserDefaultを使い、TextFieldにUIDataPickerを使用して記入した年月日をDictionary型で保存しました。
その年月日が、カレンダーの月日と同じならば、ラベル表示を変更する(もしくはセルの色を変更する)というような仕様の自作誕生日カレンダーを作成しています。
DateFormatterで年月日の書式を合わせて、if文を用いて「イコールならば・・・」というふうにコードを書いていたのですが、エラーが出て解決できなくなりました。
解決策を教えていただきたいです。またもっと良い方法などあればご教授願いたいです。
環境は、Swift3、Xcode:Version 9.0 です。
誕生日者氏名、誕生日、誕生日通知タイミングを保存
//Dictionary型のデータを保存 let saveDefault = UserDefaults.standard let saveData: Dictionary = ["NAME":"name","BIRTH":textField,"ALART":textField2] as! [String : String] saveDefault.set(saveData, forKey:"SAVE")
ここでエラーが出ました
func conversionDateFormat(indexPath: IndexPath) -> String { dateForCellAtIndexPath(numberOfItem: numberOfItems) var formatter: DateFormatter = DateFormatter() formatter.dateFormat = "yyyy年MM月dd日" //Cannot assign value of type '[String : Any]?' to type 'DateFormatter' if formatter = UserDefaults.standard.dictionary(forKey: "BIRTH") {
よろしくお願いいたします。
ーーーーーー以下追記ーーーーーーー
func dateForCellAtIndexPath(numberOfItem: Int) { // ①「月の初日が週の何日目か」を計算する let ordinalityOfFirstDay = Calendar.current.ordinality(of: .day, in: .weekOfMonth, for: firstDateOfMonth()) for i in 0 ..< numberOfItems { // ②「月の初日」と「indexPath.item番目のセルに表示する日」の差を計算する var dateComponents = DateComponents() dateComponents.day = i - (ordinalityOfFirstDay! - 1) //dateComponents.day = i // ③ 表示する月の初日から②で計算した差を引いた日付を取得 let date = Calendar.current.date(byAdding: dateComponents as DateComponents, to: firstDateOfMonth() as Date)! // ④配列に追加 currentMonthOfDates.append(date as NSDate) } } // ⑵表記の変更 func conversionDateFormat(indexPath: IndexPath) -> String { dateForCellAtIndexPath(numberOfItem: numberOfItems) // // Pickされた日付Stringの準備 // var formatter: DateFormatter = DateFormatter() formatter.dateFormat = "yyyy年MM月dd日" let pickedDateString = formatter.string(from: ) //指定したformatで作成したStringを取得 if formatter == UserDefaults.standard.dictionary(forKey: "BIRTH") { //formatter.dateFormat = "d" return formatter.string(from: currentMonthOfDates[indexPath.row] as Date) }