2017-02-22 6 views
1

は、グローバルで日付フォーマッタを持っていると言う初期化時に(たとえば)日付フォーマッタをセットアップしますか?

let df:DateFormatter = DateFormatter() 
理想的

同じグローバル初期化時に.dateFormat設定を行うには良いでしょう - ソートのこの

let df:DateFormatter = DateFormatter().dateFormat = "yyyy-MM-dd" 

のようにしかし、誰選択肢がありませんDateFormatterの初期化(DateFormatter(withDateFormat: "yyyy-MM-dd")のようなものはありません)

本当に、これには迅速な解決策がありますか?どのクラスの外にあるコードブロックの構文はありますか?それは何よりも早く実行され、その性質のものを設定できますか?

(注 - 私は、このようななどシングルトン、拡張、などの代替的なアプローチの完全認識しています:。これはスウィフト構造の問題で、おかげで)

+0

http://stackoverflow.com/a/28347285/2303865 –

+0

日付と時刻のスタイルを使用することが望ましいことに注意してくださいhort、medium、longまたはfull)を指定します。これは、ユーザーに表示する場合は、dateFormatを強制的に実行するのではなく、ユーザーにローカライズされます。 –

+0

最初のリンクは、ヴァディアンが答えたが静的な内部として宣言したものを正確に示しています。 –

答えて

4

あなたの設定を行うためにクロージャを使用し

let df : DateFormatter = { 
    let formatter = DateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd" 
    return formatter 
}() 

ただし、カプセル化されていないグローバル変数を使用することはお勧めしません。

+0

素晴らしいです! nice ... – Fattie

+0

完全にクリアであること:その閉鎖は一度だけ実行されます(iOSがアプリを起動するときに文字どおり)。 dfを使用したときに再び実行される状況はありませんか? (私はちょうどいくつかの迅速なテストを行った - しかし、私は尋ねるだろうが)ありがとう! – Fattie

+0

はい、1回実行されます。 – vadian

-1

あなたはそのようなのために独自のカスタムクラスを作成することができます。

class myDateformatter : DateFormatter { 

    override init() { 
     super.init() 
     self.dateFormat = "yyyy-MM-dd" 
     let timeZone = TimeZone(identifier: "UTC") 
     self.timeZone = timeZone 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 
+0

質問から:(注 - 私はシングルトン、エクステンションなどの代替アプローチを完全に認識しています:これはスウィフト構造の質問です、ありがとう) – Fattie

-1

をあなたはこのように、拡張に便利な初期化子を自由に実装できます:

extension DateFormatter { 
    convenience init(dateFormat: String) { 
     self.init() 
     self.dateFormat = dateFormat 
    } 
} 

使用法:

let dateFormatter = DateFormatter(dateFormat: "yyyy-MM-dd") 
dateFormatter.date(from: "2017-02-22") 
+0

質問から:(注 - 私は完全に認識していますシングルトン、エクステンションなどの代替アプローチ:これはSwift構造の質問です、ありがとうございます)。 – Fattie

関連する問題