web-dev-qa-db-ja.com

NSDate()vs NSDate.date()in Swift

私は Bloc.io Swiftrisチュートリアル に従って、日付を初期化します:

lastTick = NSDate.date()

コンパイルエラーの原因:

'date()' is unavailable: use object construction 'NSDate()'

どちらを等しくする必要があります:

NSDate *lastTick = [NSDate date];

NSDateリファレンス から)

Appleを変更 NSDateへのスイフトインターフェース 、私はNSDate.date

これは単なるNSDateですか、Objective-C APIの型メソッドを呼び出すことはできませんか?

42
max

[NSDate date]は、NSDateオブジェクトを構築するためのファクトリメソッドです。

ガイド「CocoaとObjective-CでSwiftを使用)」を読んだ場合、Objective-C APIとの対話に関するセクションがあります。

一貫性と単純さのために、Objective-CファクトリメソッドはSwiftの便利な初期化子としてマップされます。このマッピングにより、イニシャライザと同じ簡潔で明確な構文で使用できます。」

抜粋:Apple Inc.“ SwiftとCocoaおよびObjective-Cを使用。)iBooks。 https://itun.es/gb /1u3-0.l

ファクトリーメソッド:

[NSDate date]

swiftで初期化子に変換されます

NSDate()

このパターンが見つかるのはNSDateだけではなく、ファクトリメソッドを備えた他のCocoa APIでもあります。

78
bandejapaisa

NSDate()は新しい構文のようです。以前は、NSDate.date()は機能していましたが、

しかし、今すぐ使用する必要がありますNSDate()

11
ChikabuZ

Objective-Cでは、_[NSDate date]_は単に_[[NSDate alloc] init]_を呼び出します。したがって、SwiftでNSDate.date()を呼び出す必要はありません。単にNSDate()を呼び出すと、現在の日付で日付オブジェクトが初期化されます。

8
ZeMoon

Apple SwiftインターフェースをNSDate?に変更しましたか?

はい、彼らがしました。私にとって、コンパイラは次のように伝えます:

Foundation.NSDate:3:26:注:「date()」はここでは利用不可と明示的にマークされています:

@objc(date) class func date() -> Self!

そのため、Swiftで使用不可と明示的にマークされます。これは、正式に廃止されたことを意味します。