Swift異常處理:throw和rethrow


Swift異常處理體現了函數式語言的特性。因此我們能夠傳一個會拋出異常的函數閉包(高階函數)作為參數傳到還有一個函數中(父函數),父函數能夠在子函數拋出異常時直接向上拋出異常,這時用rethrowkeyword表示引用閉包時拋出的異常。
throwkeyword和Java一樣,就是說調用這個函數本身可能會拋出異常。
rethrow能夠看作是throw的子集,Swift不把rethrow作為完整的類型。

比如一個函數不能同一時候用throw和rethrow拋出異常,高階函數閉包定義中也不能包括rethrow。

rethrow更像函數的屬性(相似@noreturn)。rethrow僅僅是在函數作為參數調用的上下文中才有意義。就是為了簡化語法的。

一個接受閉包作為參數的函數有以下三種throw選擇

1、throw異常,這表示這個函數可能會拋出異常。不管作為參數的閉包是否拋出異常
2、rethrow異常,這表示這個函數本身不會拋出異常,但假設作為參數的閉包拋出了異常。那么它會把異常繼續拋上去。比如
func map<T>(@noescape transform: (Generator.Element) throws -> T) rethrows -> [T]

3、不拋出異常,這表示這個函數會處理參數閉包的異常,或者不正確閉包進行運算。


當我們使用Swift異常處理時,應該不覺得它是拋出異常。而是返回不同的類型




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM