2017-11-05 20 views
-1

카운트 다운 타이머를 만들려고하지만 할 수 없습니다. 이 오류는 과거를 얻을 :Swift 4 및 Xcode 9 : 'NSCalendar.Unit.Type, from : NSData, to : Date?'형식의 인수 목록을 사용하여 'dateComponents'를 호출 할 수 없습니다.

Cannot invoke 'dateComponents' with an argument list of type '(NSCalendar.Unit.Type, from: NSData, to: Date?)'

내 코드 :

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var TimerLable: UILabel! 



    let formatter = DateFormatter() 
    let userCleander = Calendar.current; 
    let CalenderComponent : NSCalendar.Unit = [ 
     NSCalendar.Unit.year, 
     NSCalendar.Unit.month, 
     NSCalendar.Unit.day, 
     NSCalendar.Unit.hour 
    ] 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

    } 
    func printTime() 
    { 
     formatter.dateFormat = "dd/MM/yy hh:mm a" 
     let StartTime = NSData() 
     let EndTime = formatter.date(from: "10/08/19 12:00 a") 

     let TimeDifference = userCleander.dateComponents(NSCalendar.Unit, from: StartTime, to: EndTime) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 



} 

답변

-1

오류를 발생시키는 가장 큰 문제는 바로 오타입니다. StartTimeNSDate이 아니고 NSData이라고 가정합니다.

스위프트 네이티브 대응 부분 (Calendar, Date 등)이있을 경우 기본적으로 NS... 클래스를 사용하지 마십시오.

스위프트 3+ 코드는

let formatter = DateFormatter() 
let userCalendar = Calendar.current 

let calendarComponents : Set<Calendar.Component> = [ .year, .month, .day, .hour] 

func printTime() 
{ 
    formatter.dateFormat = "dd/MM/yy hh:mm a" 
    let startTime = Date() 
    let endTime = formatter.date(from: "10/08/19 12:00 am")! 

    let timeDifference = userCalendar.dateComponents(calendarComponents, from: startTime, to: endTime) 
} 

두 노트 :

  • 변수 이름은 소문자로 시작 명명 지침에 따르면
  • 날짜 형식은 날짜 문자열과 일치하지 않습니다 생성 된 날짜를 래핑 해제해야합니다.
+0

오늘 내가 작성한 동일한 의견은 여기 https://stackoverflow.com/a/47120619/2303865에도 적용됩니다. –