###前提・実現したいこと
swiftでアプリ開発をしています
指定した時間に通知をしたいのですがエラーが発生して進みません
###発生している問題・エラーメッセージ
159行 Cannot convert value of type 'Date?' to expected argument type 'TimeInterval' (aka 'Double')
###該当のソースコード
swift
1import UIKit 2import UserNotifications 3 4class SecondViewController: UIViewController { 5 6 @IBOutlet var todo: UITextField! 7 @IBOutlet var button: UIButton! 8 @IBOutlet weak var DayTime: UITextField! 9 @IBOutlet weak var textview: UITextView! 10 11 var todoarray = [String]() 12 var todoarraydate = [String]() 13 var todocontent = [String]() 14 var todotime = [Double]() 15 var toolBar:UIToolbar! 16 var myDatePicker: UIDatePicker! 17 var time : Date = Date() 18 19 override func viewDidLoad() { 20 super.viewDidLoad() 21 _ = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(SecondViewController.check), userInfo: nil 22 , repeats: true) 23 if UserDefaults.standard.array(forKey: "todoarray") == nil { 24 todoarray = [String]() 25 } else { 26 todoarray = UserDefaults.standard.array(forKey: "todoarray") as! [String] 27 } 28 29 if UserDefaults.standard.array(forKey: "todoarraydate") == nil { 30 todoarraydate = [String]() 31 } else { 32 todoarraydate = UserDefaults.standard.array(forKey: "todoarraydate") as! [String] 33 } 34 35 if UserDefaults.standard.array(forKey: "todocontent") == nil { 36 todocontent = [String]() 37 } else { 38 todocontent = UserDefaults.standard.array(forKey: "todocontent") as! [String] 39 } 40 if UserDefaults.standard.array(forKey: "todotime") == nil { 41 todotime = [Double]() 42 } else { 43 todotime = UserDefaults.standard.array(forKey: "todotime") as! [Double] 44 } 45 // Do any additional setup after loading the view, typically from a nib. 46 47 // 入力欄の設定 48 DayTime.placeholder = "期限" //<-`dateToString`のパラメータは`Date`型なので最初から`Date()`を渡す 49 //DayTime.text = dateToString(date: Date()) //<-同上 50 self.view.addSubview(DayTime) 51 52 // UIDatePickerの設定 53 myDatePicker = UIDatePicker() 54 myDatePicker.addTarget(self, action: #selector(changedDateEvent), for: UIControlEvents.valueChanged) 55 myDatePicker.datePickerMode = UIDatePickerMode.dateAndTime 56 DayTime.inputView = myDatePicker 57 58 // UIToolBarの設定 59 toolBar = UIToolbar(frame: CGRect(x: 0, y: self.view.frame.size.height/6, width: self.view.frame.size.width, height: 40.0)) 60 61 toolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0) 62 63 let toolBarBtn = UIBarButtonItem(title: "完了", style: .plain, target: self, action: #selector(tappedToolBarBtn)) 64 let toolBarBtncancel = UIBarButtonItem(title: "キャンセル", style: .plain, target: self, action: #selector(tappedToolBarBtncancel)) 65 toolBarBtn.tag = 1 66 toolBar.items = [toolBarBtn, toolBarBtncancel] 67 DayTime.inputAccessoryView = toolBar 68 69 //枠の太さ 70 textview.layer.borderWidth = 1 71 DayTime.layer.borderWidth = 1 72 todo.layer.borderWidth = 1 73 //枠のカラー 74 textview.layer.borderColor = UIColor.gray.cgColor 75 DayTime.layer.borderColor = UIColor.gray.cgColor 76 todo.layer.borderColor = UIColor.gray.cgColor 77 // 角に丸みをつける. 78 textview.layer.masksToBounds = true 79 DayTime.layer.masksToBounds = true 80 todo.layer.masksToBounds = true 81 // 丸みのサイズを設定する. 82 textview.layer.cornerRadius = 10.0 83 DayTime.layer.cornerRadius = 10.0 84 todo.layer.cornerRadius = 10.0 85 86 } 87 88 override func didReceiveMemoryWarning() { 89 super.didReceiveMemoryWarning() 90 // Dispose of any resources that can be recreated. 91 } 92 93 // 「完了」を押すと閉じる 94 func tappedToolBarBtn(_ sender: UIBarButtonItem) { 95 self.DayTime.endEditing(true) 96 } 97 // 「キャンセル」を押すと閉じる 98 func tappedToolBarBtncancel(_ sender: UIBarButtonItem) { 99 self.DayTime.text = "" 100 self.DayTime.endEditing(true) 101 } 102 func changedDateEvent(_ sender: UIDatePicker){ //<- `UIDatePicker`からのactionの`sender`は必ず`UIDatePicker`になる 103 //`sender`を直接`UIDatePicker`として使えばいいのでキャストは不要 104 self.changeLabelDate(date: sender.date) 105 } 106 107 func changeLabelDate(date: Date) { //<- `NSDate`を使っているところは全て`Date`に置き換える 108 DayTime.text = self.dateToString(date: date) 109 } 110 111 func dateToString(date: Date) -> String { 112 //DateFormatterは参照型なので、letが適切 113 let date_formatter = DateFormatter() 114 //曜日の1文字表記をしたいならweekdaysなんて配列はいらない 115 116 date_formatter.locale = Locale(identifier: "ja") 117 date_formatter.dateFormat = "yyyy年MM月dd日(E) HH:mm" //<-`E`は曜日出力用のフォーマット文字 118 return date_formatter.string(from: date as Date) 119 } 120 121 @IBAction func addtodo(_ sender: AnyObject) { 122 let statictodo = todo.text! 123 let staticTime = DayTime.text! 124 let staticcontent = textview.text! 125 todoarray.append(statictodo) 126 todoarraydate.append(staticTime) 127 todocontent.append(staticcontent) 128 todo.text = "" 129 textview.text="" 130 131 let RFC3339DateFormatter = DateFormatter() 132 RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX") 133 RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 134 RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0) 135 136 /* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */ 137 let string = "1996-12-19T16:39:57-08:00" 138 let date = RFC3339DateFormatter.date(from: string) 139 todotime.append((date?.timeIntervalSinceNow)!) 140 //time = date! 141 142 UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ 143 (qranted, error) in 144 } 145 let content = UNMutableNotificationContent() 146 content.title = "明日課題提出だよ" 147 //content.body = "" 148 content.sound = UNNotificationSound.default() 149 150 let isrepeat = false 151159 _ = UNTimeIntervalNotificationTrigger(timeInterval: (date?.timeIntervalSinceNow)! ,repeats: isrepeat) 152 153 UserDefaults.standard.set(todoarray, forKey: "todoarray") 154 UserDefaults.standard.set(todoarraydate, forKey: "todoarraydate") 155 UserDefaults.standard.set(todocontent, forKey: "todocontent") 156 UserDefaults.standard.set(todotime, forKey: "todotime") 157 self.performSegue(withIdentifier: "Return", sender: self) 158 } 159 160 func check() { 161 if todo.text != "" && DayTime.text != "" && textview.text != ""{ 162 button.isHidden = false 163 } else { 164 button.isHidden = true 165 } 166 } 167 168}
###最後に
分からないことがあれば質問お願いします
エラーメッセージの意味が分からないんですか?
回答1件
あなたの回答
tips
プレビュー