Nichts ist jemals 100% sicher in der Programmierung, besonders wenn es sich um ein SDK handelt, bei dem die Implementierung ausgeblendet ist. Ich beantwortete eine ähnliche Frage über die Konstante NSNotFound
here.
Ist NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
sicher? Im Idealfall, wenn Apple das SDK nicht ändert oder wenn es eine fehlerfreie Implementierung des Initialisierers NSCalendar
bietet. Soweit defensive Codierung geht, haben Sie zwei Möglichkeiten.
Wickeln Sie den Code in einem guard
als Leo Dabus in den Kommentaren vorgeschlagen:
guard let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) else { return }
Für Zukunftssicherheit kann Apple die Verfügbarkeit oder die Umsetzung des NSCalendarIdentifier
Konstanten ändern (wie bei NSNotFound
gesehen). Für zusätzliche Sicherheit, überprüfen Sie den Speicherort der Konstanten:
if let str: String = NSCalendarIdentifierGregorian {
if let _: UnsafePointer<Void> = unsafeAddressOf(str) {
// NSCalendarIdentifierGregorian is defined on your platform
}
}
Es ist ein wenig sauberer in Objective-C:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-compare"
BOOL found = (&NSCalendarIdentifierGregorian != NULL);
#pragma clang diagnostic pop
if (found) {
// safe
}
ich nicht für Apple arbeiten und die Verfügbarkeit von Stiftung nicht garantieren können, Klassen.
ist es irgendein Problem mit 'Wachen lassen cal = NSCalendar (calendarIdentifier: NSCalendarIdentifierGregorian) else {return}' –
Nun nutzt die App den Kalender einige Statistiken zu berechnen (dh der Benutzer und Analysen nicht nur für App-Optimierung sehen), wenn der richtige Kalender nicht verfügbar ist, ist das ein Problem. Ich kann nicht einfach sagen, macht nichts, mach das ganze Processing dann nicht. – TimSim
Benutze einfach den aktuellen Kalender –