2016-12-11 5 views
1

変数datateに値 'datetime' mysql dbaseを割り当てる必要があります。 レコードはhttprequestから文字列としてインポートされます。 次に、文字列形式からDate()を設定したいと思います。 だから私はこの機能を持っている:swiftの文字列から日付を設定する3

func parseDate(dateStr:String, format:String="yyyy-MM-dd HH:mm") -> Date { 

    let myLocale = Locale(identifier: "it_IT") 
    let dateFormat = DateFormatter() 
    dateFormat.timeZone = TimeZone(abbreviation: "CEST") 
    dateFormat.locale = myLocale 
    dateFormat.dateStyle = .medium 
    dateFormat.timeStyle = .medium 
    dateFormat.dateFormat = format 

    return dateFmt.date(from: dateStr) 
} 

私はこのエラーがあります: 『?日』「タイプのreturn式を変換できません。戻り値の型に 'Date'を返します。

どうすれば解決できますか?

+0

場合にそれができない、あなたの関数の戻り値 '日'作ります?文字列を解析します。 – Rob

+0

この関数をオプションの戻り値として作成するには –

+0

ロケールまたはtimeZomeを手動で設定しないでください。あなたの日付文字列にタイムゾーンがない場合は、ロケールとタイムゾーンのデフォルトの日付フォーマッタを使用してください(デフォルトは現地時間です) –

答えて

0

迅速なオプションタイプと非オプションの同等タイプは同じタイプとして扱うことができません。つまり、DateDate?は異なるタイプです。

関数は、オプションのDate - Date?を返します。この関数は、オプションではないDateを返します。

あなたの関数を修正いずれか...-> Date?...-> Date {を変更することで、オプションの値を返すか、return文にオプションの拡張により、非オプション値を返すには:return dateFmt.date(from: dateStr) ?? Date(timeIntervalSince1970: 0)

+0

私は間違いなくオプションのパターンを使用することをお勧めします。スウィフトでのオプションの考え方は、予測可能で信頼できるセンチネル値を持つことです。 'Date(timeIntervalSince1970:0)'のようなものを使用することは、この設計コンセプトとは対照的です。 – Rob

+1

私は実際に@Robと同意します。完全性のために拡張を追加しました – 92tonywills

+0

func parseDate(dateStr:String、format:String = "yyyy-MM-dd HH:mm") - > Dateのメソッド宣言を変更しましたか? {.... 'とreturn文' return dateFmt.date(from:dateStr) 'を返します。 これで、 'Date型の戻り式を変換できません。 'Date?'型を返す –

関連する問題