Swift 4 和 Xcode 9:无法使用类型为 '(NSCalendar.Unit.Type, from: NSData, to: Date?)' 的参数列表调用'dateComponent



尝试创建一个倒数计时器,但我无法克服此错误:

无法使用类型为"(NSCalendar.Unit.Type, from: NSData, to: Date?)"的参数列表调用"dateComponents"

我的代码:

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.
    }

}

导致错误的主要问题只是一个拼写错误。 StartTime应该是NSDate而不是NSData.

基本上不要使用 NS... 类,如果有 Swift 原生对应项(CalendarDate 等)。

Swift 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)
}

两个注意事项:

  • 根据命名准则,变量名称以小写字母开头
  • 日期
  • 格式与日期字符串不匹配,需要解开创建的日期。

最新更新