2015-02-08 40 views
2

我應該返回像一個可選值:如何在Swift中用邊緣情況返回單個值?

func someFunc(#num: Int) -> Obj? { 
    if num < 0 { 
    return nil 
    } 

    ... 
} 

或者只是使用assert

func someFunc(#num: Int) -> Obj { 
    assert(num >= 0, "Number should greater or equal then zero") 

    ... 
} 

編輯:現在的條件是在兩種情況下是相同的,數量應該大於或等於0則負值是不允許的。

+0

@Zaph抱歉,缺少類型。 'num'是Int。 – mrahmiao 2015-02-09 11:36:43

回答

1

如果您使用斷言並且調用者傳遞了無效參數,那麼這是一個不可恢復的錯誤/崩潰。調用者可能不知道斷言可能引起的所有方式,即調用者不應該知道的內部邏輯。

真的,唯一有時間斷言是有意義的是檢查方法輸入的調用參數,即使在這種情況下,必須向用戶明確什麼是無效的,並且永遠不會對生命中的更嚴格方法。

由於這是關於Swift返回的,可選的似乎是最有意義的,調用者將清楚必須處理可能的錯誤。可選項是Swift的一個主要功能,使用它們。

或者總是返回一個有用的結果atan()句柄被稱爲±0和±Inf。

0

它取決於你想要的函數的前提條件:如果它是一個錯誤調用它的負值(或非正面;你的兩個例子是矛盾的),然後去與斷言和文件這。然後它成爲合同的一部分,如果函數的用戶不確定,則該函數的用戶必須檢查該值。或者,如果支持這些值更有意義並返回nil(例如,該函數通常會被調用這些值,並且nil對於該典型用途而言不是問題),那麼就這樣做......不知道細節是不可能的最適合,但我的猜測是前者。

相關問題