Select一次并执行当时的代码
Select a time and execute code at that time
我正在尝试添加一项功能,让某人 select 一次形成 UIDatePicker。一旦当前时间和 selected 的时间匹配,代码就会被执行。这听起来很简单,但我的代码很乱。
我尝试使用计时器每秒更新一次代码,以查看 selected 时间是否与 iPhone 的内部时钟匹配。然而,这并没有成功地使用我的代码。我编写的代码以 1 分钟为增量设置了一个计时器。如果时间是 9:30:21 而你是 select 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
}
但我得到一个错误无法将值类型 'date' 转换为预期的参数类型 'timeinterval'(又名 'double')
您可以简单地安排一个计时器在选择器指定的日期触发。
let timer = Timer(fireAt: fireDate, interval: 0, target: self, selector: #selector(<a selector you want to use...>), repeats: false)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
因此,只需在 "fireAt" 参数中传递选择器日期,计时器就会在该日期触发,运行 您提供的选择器。
我正在尝试添加一项功能,让某人 select 一次形成 UIDatePicker。一旦当前时间和 selected 的时间匹配,代码就会被执行。这听起来很简单,但我的代码很乱。
我尝试使用计时器每秒更新一次代码,以查看 selected 时间是否与 iPhone 的内部时钟匹配。然而,这并没有成功地使用我的代码。我编写的代码以 1 分钟为增量设置了一个计时器。如果时间是 9:30:21 而你是 select 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
}
但我得到一个错误无法将值类型 'date' 转换为预期的参数类型 'timeinterval'(又名 'double')
您可以简单地安排一个计时器在选择器指定的日期触发。
let timer = Timer(fireAt: fireDate, interval: 0, target: self, selector: #selector(<a selector you want to use...>), repeats: false)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
因此,只需在 "fireAt" 参数中传递选择器日期,计时器就会在该日期触发,运行 您提供的选择器。