无法将类型“日期”的值转换为预期的参数类型“日期”

时间:2018-06-27 19:33:37

标签: swift

在操场上,此代码可以很好地工作,并且我可以完全按照期望的方式获得预期的输出,但是当我将其放入Xcode项目中时,我的 startDate

会收到3条警告
  

无法将类型为“日期”的值转换为预期的参数类型为“日期”

这是我的代码:

let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMMM, dd yyyy"
    let date = dateFormatter.date(from: "June, 27 2018")

    if let date = date {
        let calendar = Calendar(identifier: .gregorian)

        var startDate : Date = Date()
        var interval : TimeInterval = 0

        if calendar.dateInterval(of: .weekOfYear, start: &startDate, interval: &interval, for: date) {
            print(startDate)
            let daysToAdd = 6
            var dateComponent = DateComponents()

            dateComponent.day = daysToAdd

            let futureDate = Calendar.current.date(byAdding: dateComponent, to: startDate)

            let dateFormatter1 = DateFormatter()
            dateFormatter1.dateFormat = "MMMM dd-"
            let dateFormatter2 = DateFormatter()
            let startWeek = dateFormatter1.string(from: startDate)
            dateFormatter2.dateFormat = "dd"
            let endWeek = dateFormatter2.string(from: futureDate!)
            results = "\(startWeek)\(endWeek)"
        }
    }

enter image description here

3 个答案:

答案 0 :(得分:3)

输入Date上的绿色文字

var startDate : Date = Date()

表示您拥有自己的名为Date的类/结构。无法将其转换为Foundation.Date

首先创建这种名称冲突不是一个好主意,但是您可以使用全名来解决它:

var startDate = Foundation.Date()

答案 1 :(得分:0)

var startDate = Date()

我遇到了同样的问题,并使用上面的代码修复了该问题。希望对你有用。

答案 2 :(得分:0)

用一个例子来说明这个问题。

这将产生错误,因为虽然我确实想在Result对象中返回一个Date,但是我不需要在此函数的接口处创建一个名为Date的泛型。那是我的错误。

func daysAgo<Date>(_ dayCount: Int) -> Result<Date, CommonErrors> {
    let date: Date? = Calendar.current.date(byAdding: .day, value: dayCount, to: self)
    return Result(success: date, failure: .initFailed)
}

以下代码解决了我的问题:

func daysAgo(_ dayCount: Int) -> Result<Date, CommonErrors> {
   let date: Date? = Calendar.current.date(byAdding: .day, value: dayCount, to: self)
   return Result(success: date, failure: .initFailed)
}