対象は NSDateComponents
です。
DateComponents
ではないためこの問題に引っかかる人は少ないと思いますが、簡単に情報を残しておきます。
Failable Initializer(init?)を追加して return nil
するとクラッシュすることがあります。
環境は Xcode11.1 (11A1027) です。
以下がクラッシュするコードです。
(こんなメソッドいらないだろう? みたいなツッコミはなしで😎)
extension NSDateComponents {
@objc convenience init?(string: String) {
guard ! string.isEmpty else {
return nil
}
self.init()
self.hour = Int(string)!
}
}
Xcode10のときは動いていました。
Xcode11だとこれを呼び出したあとクラッシュします。
以下のように変更すると動きます。
extension NSDateComponents {
@objc convenience init?(string: String) {
self.init() // `return nil` する場合も必ず呼び出す。
guard ! string.isEmpty else {
return nil
}
self.hour = Int(string)!
}
}
NSObject
を適当に継承したクラスで super.init()
を呼び出さなくても問題はありませんでした。
NSDateComponents(もしかしたら他のクラスでも)の実装の問題なのでしょうか。
自分のコードのお行儀が悪いのかバグなのかはわかりませんでしたがお気をつけください。