[英]How to create Compiler warning for my function in Swift
我想驗證我的輸入以在某些條件下運行並顯示為編譯器警告/錯誤。
怎么可能?
例如:
func getPoints(start: Int, end: Int) {
}
當有人試圖為開始而不是結束提供高輸入時,我想顯示編譯器警告/錯誤。
getPoints(start: 3, end: 10) // No warnings
getPoints(start: 6, end: 2) // Compiler warning like: end value can not be less than start value
實際上,這是出於框架目的。 我想確保參數不是錯誤的輸入。
這樣的約束不能在編譯時強制執行。 以Range
為例,它強制lowerBound
總是小於或等於upperBound
。 這只是一個在運行時運行的斷言,如果不滿足就會崩潰。
我建議您更改 API 設計以使用Range<Int>
或ClosedRange<Int>
將成對的Int
用於模擬范圍是一個壞主意,原因有很多:
contains(_:)
,也沒有通過~=
運算符支持模式匹配。getPoint(3...10)
您無法在編譯時生成警告,因為除了檢查類型一致性之外,不會評估參數。
在您的示例中,您使用了常量,因此理論上可以執行您想要的檢查,但是如果您傳遞了一個變量或另一個函數的結果呢? 編譯器需要執行多少代碼才能執行檢查?
您需要在運行時強制執行您的要求。 例如,如果參數不正確,您可以讓函數throw
:
enum MyErrors: Error {
case rangeError
}
func getPoints(start: Int, end: Int) throws {
guard start <= end else {
throw MyErrors.rangeError
}
...
}
或者你可以讓函數簡單地處理問題:
func getPoints(start: Int, end: Int) {
let beginning = min(start,end)
let ending = max(start,end)
...
}
另外,我建議亞歷山大使用Range
而不是Int
的建議; 利用 Foundation 類型總是一個好主意,但我會留下我的答案,因為它顯示了一些在運行時處理問題的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.