누구든지 내가 어떻게 해결할 수 있는지 알고 있습니까? 이 오류가 발생합니다.
¨ 'NSDate'유형의 값을 예상 인수 유형 'NSDateComponents'로 변환 할 수 없습니다.
다음 줄에서 오류가 발생했습니다.
let competitionDay = userCalendar.dateFromComponents(competitionDate)!
다음은 코드의 더 완전한 발췌입니다.
func Date() {
// Here we set the current date
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date)
let hour = components.hour
let minutes = components.minute
let month = components.month
let year = components.year
let day = components.day
let currentDate = calendar.dateFromComponents(components)
// here we set the due date. When the timer is supposed to finish
// final Calendar value
let userCalendar = NSCalendar.currentCalendar()
let competitionDate:NSDate = myDatePicker.date
competitionDate.timeIntervalSinceNow
let competitionDay = userCalendar.dateFromComponents(competitionDate)!
// Here we compare the two dates
competitionDay.timeIntervalSinceDate(currentDate!)
let dayCalendarUnit = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Hour, NSCalendarUnit.Minute], fromDate: date)
//here we change the seconds to hours,minutes and days
let competitionDayDifference = calendar.components([.Day, .Hour, .Minute],
fromDate: currentDate!, toDate: competitionDay, options: NSCalendarOptions())
//finally, here we set the variable to our remaining time
let daysLeft = competitionDayDifference.day
let hoursLeft = competitionDayDifference.hour
let minutesLeft = competitionDayDifference.minute
귀하의 원래 질문에서을 호출했습니다 dateFromComponents
. 이는 a NSDateComponents
를 로 변환 NSDate
하지만 competitionDate
이미 NSDate
. 그리고 컴파일러는 단순히이 오류를 알려줍니다.
-
제쳐두고, 당신이 채울으로 NSDateComponents
으로 .Hour
, .Minute
, .Second
, 및 .Nanosecond
A로부터 NSDate
, 그러나 진행합니다에 대한 참조 저장하려고하는 components.year
과를 components.month
하고 components.day
당신은 그 구성 요소가 포함되어야 함을 지정하지 않은 경우에도 NSDateComponents
.
-
아래 당신은 말한다 :
그것은 카운트 다운 앱이고 DatePicker가 카운트 다운하는 날짜를 선택하기를 원할 때까지 실행했습니다. CompetitionDate는 마감일입니다.
그것이 정말로 당신이 원하는 것이라면 아마도 NSDateComponents
전혀 필요하지 않을 것 입니다. 나는 아마도 두 개체 사이의 시간을 나타내는 멋진 문자열 표현을 사용자에게 보여주기 위해 NSDateComponentsFormatter
메서드 stringFromDate:toDate:
를 사용할 것입니다 NSDate
.
예를 들면 :
class ViewController: UIViewController {
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var label: UILabel!
weak var timer: NSTimer?
let formatter: NSDateComponentsFormatter = {
let _formatter = NSDateComponentsFormatter()
_formatter.allowedUnits = [.Year, .Month, .Day, .Hour, .Minute, .Second]
_formatter.unitsStyle = .Full
return _formatter
}()
override func viewDidLoad() {
super.viewDidLoad()
datePicker.date = NSDate().dateByAddingTimeInterval(1000) // initialize it to whatever you want
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "didFireTimer:", userInfo: nil, repeats: true)
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
timer?.invalidate()
}
func didFireTimer(timer: NSTimer) {
label.text = formatter.stringFromDate(NSDate(), toDate: datePicker.date)
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다