2016-09-06 43 views
6

dateByAddingComponents:toDate:options: ve dateByAddingUnit:value:toDate:options: kullanıyorum ve çıktısını almak için isteğe bağlı ciltleme kullanıyordum. Şunun gibi:dateByAddingComponents: toDate: seçenekleri ne zaman geri döner?

İade:

oneMonthComponent Ben bu konuda okuduğumda 1.

olarak ayarlanmış ay değeriyle sadece NSDateComponent olduğunu

guard let startOfNextMonth = calendar.dateByAddingComponents(oneMonthComponent, toDate: startOfThisMonth, options: []) else { 
    return nil 
} 

, belgelerde ikisi de bir şey gibi söylüyor tarih, alıcının tanımlı aralığının dışında kalırsa veya hesaplama yapılamazsa.

Ve merak ettim, tam olarak ne zaman meydana geldi. Eğer bir tarihe bir ay ekliyorsam, hiçbir zaman sıfır olamayacak bir yol var mı? Bu, bazı birimlerin eklenmesi anlamsız olan diğer takvim sistemlerinde bazı farklılıklar olduğu için mi?

Çevremde arama yaptım ve nil dönecek bir örnek bulamadık.

Yukarıdaki kodu sıfırlayabilecek herhangi bir şey var mı? Bileşen ekleme nil olabilir bir örnek nedir?

+0

Swift> = 3'te, yöntem adının 'date (byAdding: to: options:)' olduğunu unutmayın. –

cevap

3

Pratikte, bir tarihe yalnızca bir ay ekliyorsanız, nil değerlerine sahip olmazsınız.

Bazı dejenere durumlarda nil değerini alabilirsiniz. Örneğin, İslami takvimi kullanıyorsanız ve -9,999,999 yılını eklerseniz, nil (yine de merakla, diğer takvimlerde değil) alırsınız. Diğer takvimler genellikle bu olağanüstü durumlarda yıl boyunca taşacak/sarılacaktır (alıntı yaptığınız belgeler göz önüne alındığında, nil numaralı ürünü iade etmelerini beklemiş olsanız bile).

Şahsen, şu anda nil değerlerini alacağınız çok az durum olduğundan şüpheleniyorum. Her türlü uç değerler denedim ve İslam takviminde nil değerini almayı başarabildim. Ancak, Apple'ın gelecekte daha sağlam bir tarih doğrulama mantığı eklemeyeceği anlamına gelmez. Muhtemelen bu soruyu cevaplamak için Apple'dan bir danışman almalıyız (ya da NSCalendar için kaynak kodunu görmeliyiz).

Yani, sonuç olarak, guard bildirimini tutmanızı öneriyoruz, ancak gerçek dünyadaki senaryolarda başarısız olma olasılığı yoktur.