私は 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の型メソッドを呼び出すことはできませんか?
[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でもあります。
NSDate()
は新しい構文のようです。以前は、NSDate.date()
は機能していましたが、
しかし、今すぐ使用する必要がありますNSDate()
Objective-Cでは、_[NSDate date]
_は単に_[[NSDate alloc] init]
_を呼び出します。したがって、SwiftでNSDate.date()
を呼び出す必要はありません。単にNSDate()
を呼び出すと、現在の日付で日付オブジェクトが初期化されます。
Apple Swiftインターフェースを
NSDate
?に変更しましたか?
はい、彼らがしました。私にとって、コンパイラは次のように伝えます:
Foundation.NSDate:3:26:注:「date()」はここでは利用不可と明示的にマークされています:
@objc(date) class func date() -> Self!
そのため、Swiftで使用不可と明示的にマークされます。これは、正式に廃止されたことを意味します。