誰かがUIDatePickerから時間を選択する機能を追加しようとしています。選択されている現在の時刻と時刻が一致すると、コードが実行されます。これはかなりシンプルに聞こえるが、私のコードは混乱している。時刻を選択してコードを実行する
私は、選択した時刻がiPhoneの内部時計と一致するかどうかを確認するために、毎秒コードを更新するためにタイマーを使用しようとしました。これは私のコードではうまくいきませんでした。私が書いたコードは1分単位でタイマーを設定します。時間が9:30:21で9:31を選択した場合、9:31に実行されるコードではなく、9:31:21に実行されます。ここで私のコードは、どんな助けも大歓迎です。
@IBAction func datePickerchanged(_ sender: Any) {
setDateAndTime()
check()
timercount = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(check), userInfo: nil, repeats: true)
_ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(check), userInfo: nil, repeats: true)
let clockString: String = formatADate()
if str == clockString{
takePhoto = true
}
}
func update(_ currentTime: TimeInterval) {
let clockString: String = formatADate()
if str == clockString{
takePhoto = true
}
}
func refreshView() {
let clockString: String = formatADate()
if str == clockString{
takePhoto = true
}
}
func check() {
let fireDate = datePicker.date
if fireDate < Date() {
takePhoto = true
}
}
func setDateAndTime() {
check()
timercount = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(check), userInfo: nil, repeats: true)
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm:ss a"
_ = formatter.string(from: datePicker.date)
str = dateFormatter.string(from: (datePicker?.date)!)
}
func formatADate() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .short
dateFormatter.dateFormat = "hh:mm:ss a"
let date = NSDate()
let output = dateFormatter.string(from: date as Date)
print(output)
return output
}
私はこのコードを使用してみました:
func check() {
let fireDate = datePicker.date
let timer = Timer(timeInterval: fireDate, target: self, selector: Selector(take), userInfo: 0, repeats: false)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
if fireDate < Date() {
takePhoto = true
}
}
func take() {
takePhoto = true
}
が、私はエラーが値タイプ「日は」(別名「ダブル」)期待される引数の型「時間間隔」に変換することはできません取得
あなた自身の質問を繰り返さないでください。http://stackoverflow.com/questions/42603809/compare-selected-time-to-current-time – matt
なぜ唯一の一致する時間が既に分かっているかを毎回チェックしたいのですが?最も早いマッチング時間で発生する繰り返しタイマーを使用します。たとえば、ユーザーが16:00を選択して15:00になった場合、最も早いマッチング時間は今日の16:00になります。だから、タイマーを発射するように設定してください。タイマーが起動すると、比較するものはありません。それは今の瞬間です。 – matt
@mattあなたが私の他の質問を読んでいれば、彼らはお互いに異なることが分かります。他の人が何度も何度も同じ質問をして、私は偽善者ではないのです。あなたが投稿した2番目のコメントは正しく聞こえますが、私は何が間違っているのか分かりません。正しいコードで回答を投稿してください。 –