无法将“String”类型的值转换为预期的参数类型“TimeInterval”(又名“Double”)

Posted

技术标签:

【中文标题】无法将“String”类型的值转换为预期的参数类型“TimeInterval”(又名“Double”)【英文标题】:Cannot convert value of type 'String' to expected argument type 'TimeInterval' (aka 'Double') 【发布时间】:2017-05-15 03:39:50 【问题描述】:

我正在格式化传入的时间。我收到了这个错误,我正试图弄清楚这里发生了什么。我正在使用最新版本的 Xcode (v. 8) 并且正在使用 Swift 3 进行编程。这个错误意味着什么以及如何修复它?

我正在拼凑与问题相关的部分代码,因此这里的信息不会过多。

var date: String 
    if _date == nil 
        _date = ""
    
    return _date


init(weatherDict: Dictionary<String, AnyObject>)
    if let temp = weatherDict["temp"] as? Dictionary<String, AnyObject>
    
        if let min = temp["min"] as? Double
            self._lowTemp = ktof(kelvins: min)
        

        if let max = temp["max"] as? Double
            self._highTemp = ktof(kelvins: max)
        
    

    let unixConvertedDate = Date(timeIntervalSince1970: date)

    if let date = weatherDict["dt"] as? Double 
        let unixConvertedDate = Date(timeIntervalSince1970: date)
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .full
        //dateFormatter.dateFormat = "EEEE"
        dateFormatter.dateStyle = .none
        self._date = unixConvertedDate.dayoftheWeek()
    

然后在类之外,上面所有的代码都在里面,我有这个。

extension Date 
func dayoftheWeek() -> String 
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "EEEE"
    return dateFormatter.string(from: self)
    

【问题讨论】:

删除多余的行let unixConvertedDate = Date(timeIntervalSince1970: date)。您不需要两个 if let 块之间的那个。 他还可以从init中完全删除日期格式化程序 顺便说一句,为什么不简单地var date = "" 【参考方案1】:
            if let date = weatherDict["dt"] as? Double 

            let unixConvertedDate = Date(timeIntervalSince1970: date)
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .full
            dateFormatter.dateFormat = "EEEE"
            dateFormatter.timeStyle = .long
            self._date = "\(unixConvertedDate)"
        

    



extension Date 
    func dayOfTheWeek() -> String 
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "EEEE"
        return dateFormatter.string(from: self)
    

【讨论】:

请在您的代码中提供一些解释。有关更多信息,请参阅帮助中心:***.com/help/how-to-answer

以上是关于无法将“String”类型的值转换为预期的参数类型“TimeInterval”(又名“Double”)的主要内容,如果未能解决你的问题,请参考以下文章

“无法将 '(String) -> Bool' 类型的值转换为预期参数”

无法将 String 类型的值转换为预期的参数类型 NSManagedObject

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

如何在此 for 循环中修复'无法将'String'类型的值转换为预期的参数类型'Int'

无法将“NSMutableDictionary”类型的值转换为预期的参数类型“[String: AnyObject]?”

Swift:无法将类型“[String:DayData]”的值转换为预期的参数类型“AnyObject?”