web-dev-qa-db-ja.com

タイプ「TimeZone」には、Swift3のメンバー「local」がありません

Xcode8 Beta4を使用して、Swift2.3で開発されたプロジェクトをSwift3.0に変換しています。日付を文字列に変換する方法がありますが、変換に失敗します。

class func convertDateToString(_ date:Date, dateFormat:String) -> String?
{
    let formatter:DateFormatter = DateFormatter();
    formatter.dateFormat = dateFormat;
    formatter.timeZone = TimeZone.local
    let str = formatter.string(from: date);
    return str;
}

enter image description here

また、ドキュメントにはlocalという名前のメンバーはありません。

TimeZoneを直接使用する方法はありますか?またはNSTimeZoneを使用する必要がありますか?

17
technerd

クラス階層を深く調べることで、NSTimeZonepublic typealiasとして見つけ、NSTimeZoneへのアクセスを可能にします。

内部TimeZone

public struct TimeZone : CustomStringConvertible, CustomDebugStringConvertible, Hashable, Equatable, ReferenceConvertible {

    public typealias ReferenceType = NSTimeZone
}

そのため、以下の構文エラーを使用すると、表示されなくなります。

したがって、以下のコードが機能します。

localタイムゾーンの場合。

formatter.timeZone = TimeZone.ReferenceType.local

デフォルトタイムゾーンの場合。同じ構文でdefaultを使用します。

formatter.timeZone =  TimeZone.ReferenceType.default

システムタイムゾーンの場合。同じ構文でsystemを使用します。

formatter.timeZone = TimeZone.ReferenceType.system

Swift

.currentの代わりに.localを使用できます。

TimeZone.current
26
technerd

.localの代わりにこれを使用して、Swift 3:

TimeZone.current
24
RawMean