[英]Is there a way to overload operator ! in Swift to avoid crash in production builds?
如果存在 nil,強制解包會導致您的應用程序崩潰。 這在應用程序的開發階段非常酷。 但是,如果您懶得執行 if let nil 檢查,這對於您的生產構建尤其令人頭疼。
有沒有人嘗試過任何操作員重載/覆蓋來阻止生產構建的這些崩潰?
不,沒有,沒有,也不應該有。
崩潰是故意的。 Swift 語言的實現者特意設計了強制解包運算符 ( !
) 以使其崩潰。
這是設計使然。
當遇到nil
並且沒有安全處理時,有兩種處理方式:
或者
您認為這兩個選項中哪個更有意義?
老實說,如果可能的話,我必須維護一個使用類似內容的代碼庫,我會睜大眼睛。 Swift 提供了一種簡單的方法來解決您由於懶惰(可選)而積極避免的問題。 您可能可以對這些變量進行保護,但它需要與使用 if let 語句相同的工作量。 我建議的解決方案是停止懶惰並正確使用語言。 檢查您的代碼庫並修復此問題,從長遠來看,它將為您節省更多時間。
不能超載! 既然是預定的,但是我們可以用❗️
protocol Bangable {
init()
}
postfix operator ❗️
postfix func ❗️<T: Bangable>(value: T?) -> T {
#if DEBUG
value!
#else
value ?? T.init()
#endif
}
extension String: Bangable {}
extension Int: Bangable {}
let bangable: Int? = 8
let cantBangOnDebug: Int? = nil
print(bangable❗️) // 8
print(cantBangOnDebug❗️) // Crashes on Debug!
請不要在生產中實際使用它。 這只是給出一個關於如何實現的想法,而不是它應該
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.