Swift throws 處理異常

一猎拨、需要在你異常處理的方法上面加上throws脊凰,下面就拿驗(yàn)證手機(jī)來(lái)舉例

  func verifyPhoneLegal(_ phone: String) throws -> String {
        
    }

二、創(chuàng)建錯(cuò)誤信息枚舉

enum PhoneError: Error {
    case phoneEmpty //電話為空
    case phoneLengthError //長(zhǎng)度不對(duì)
    case phoneRuleError //規(guī)則不對(duì)
}

三、根據(jù)不同的錯(cuò)誤類型返回不同的錯(cuò)誤枚舉

    func verifyPhoneLegal(_ phone: String) throws -> String {
        if phone.isEmpty {
            throw PhoneError.phoneEmpty
        } else if phone.count != 11 {
            throw PhoneError.phoneLengthError
        } else if !phone.hasPrefix("1") {
            throw PhoneError.phoneRuleError
        }
        return phone
    }

四在跳、使用這個(gè)方法,調(diào)用帶有throws的方法必須使用try

try有3種使用方法
1饮六、try谣沸? 系統(tǒng)幫助我們處理異常,如果該方法出現(xiàn)了異常,則該方法返回nil.如果沒(méi)有異常,則返回對(duì)應(yīng)的對(duì)象

        let phone = try? WSDateUtil().verifyPhoneLegal("")
        printLog(phone)
        let phone1 = try? WSDateUtil().verifyPhoneLegal("12345678900")
        printLog(phone1)

輸出結(jié)果:
2023-06-28 15:14:15.898 LoginViewController.swift[139], buttonClick(sender:): nil
2023-06-28 15:14:15.905 LoginViewController.swift[141], buttonClick(sender:): Optional("12345678900")

2死姚、try! 直接告訴系統(tǒng),該方法沒(méi)有異常.注意:如果該方法出現(xiàn)了異常,那么程序會(huì)報(bào)錯(cuò)(崩潰)

        let phone = try! WSDateUtil().verifyPhoneLegal("")
        printLog(phone)

直接報(bào)錯(cuò)
截屏2023-06-28 15.18.31.png

3、do catch 方法勤篮,錯(cuò)誤會(huì)走catch
可以通過(guò)catch 里面 error 參數(shù)捕捉具體異常類型

        do {
            let phone = try WSDateUtil().verifyPhoneLegal("")
            printLog(phone)
        } catch {
            switch error {
            case PhoneError.phoneEmpty:
                printLog("手機(jī)號(hào)為空")
            default:
                printLog("其他錯(cuò)誤")
            }
        }
        do {
            let phone = try WSDateUtil().verifyPhoneLegal("12345678900")
            printLog(phone)
        } catch {
            printLog(error)
        }

輸出結(jié)果:
2023-06-28 15:25:16.637 LoginViewController.swift[143], buttonClick(sender:): 手機(jī)號(hào)為空
2023-06-28 15:25:16.644 LoginViewController.swift[150], buttonClick(sender:): 12345678900

第一個(gè)走catch都毒,并且判斷出來(lái)是手機(jī)號(hào)為空,第二個(gè)正確的直接在do里面返回我們想要的結(jié)果

五碰缔、do catch 特殊用法

1账劲、每個(gè)catch里面都用switch,代碼太冗余了金抡,可以使用如下方法

do {
      let phone = try WSDateUtil().verifyPhoneLegal("")
      printLog(phone)
} catch {
    (error as! PhoneError).errorStr()
}

enum PhoneError: Error {
    case phoneEmpty //電話為空
    case phoneLengthError //長(zhǎng)度不對(duì)
    case phoneRuleError //規(guī)則不對(duì)
    
    func errorStr() {
        switch self {
        case .phoneEmpty:
            printLog("電話為空")
        case .phoneLengthError:
            printLog("長(zhǎng)度不對(duì)")
        case .phoneRuleError:
            printLog("規(guī)則不對(duì)")
        }
    }
}

輸出結(jié)果:
2023-06-28 15:43:04.022 WSDateUtil.swift[23], errorStr(): 電話為空

2瀑焦、throw 返回帶參數(shù)結(jié)果,比喻手機(jī)號(hào)碼長(zhǎng)度不對(duì)時(shí)返回對(duì)應(yīng)的長(zhǎng)度
枚舉

enum PhoneError: Error {
    case phoneEmpty //電話為空
    case phoneLengthError(Int) //長(zhǎng)度不對(duì)
    case phoneRuleError //規(guī)則不對(duì)
    
}

方法

    func verifyPhoneLegal(_ phone: String) throws -> String {
        if phone.isEmpty {
            throw PhoneError.phoneEmpty
        } else if phone.count != 11 {
            throw PhoneError.phoneLengthError(phone.count)
        } else if !phone.hasPrefix("1") {
            throw PhoneError.phoneRuleError
        }
        return phone
    }

調(diào)用

        do {
            let phone = try WSDateUtil().verifyPhoneLegal("123")
            printLog(phone)
        } catch {
            switch error {
            case PhoneError.phoneEmpty:
                printLog("手機(jī)號(hào)為空")
            case let PhoneError.phoneLengthError(msg):
                printLog("手機(jī)號(hào)長(zhǎng)度為\(msg)")
            default:
                printLog("其他錯(cuò)誤")
            }
        }

輸出結(jié)果:
2023-06-28 16:12:34.615 LoginViewController.swift[145], buttonClick(sender:): 手機(jī)號(hào)長(zhǎng)度為3

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梗肝,一起剝皮案震驚了整個(gè)濱河市榛瓮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌统捶,老刑警劉巖榆芦,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異喘鸟,居然都是意外死亡匆绣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)什黑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)崎淳,“玉大人,你說(shuō)我怎么就攤上這事愕把〖鸢迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵恨豁,是天一觀的道長(zhǎng)嚣镜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)橘蜜,這世上最難降的妖魔是什么菊匿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮计福,結(jié)果婚禮上跌捆,老公的妹妹穿的比我還像新娘。我一直安慰自己象颖,他們只是感情好佩厚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著说订,像睡著了一般抄瓦。 火紅的嫁衣襯著肌膚如雪潮瓶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天闺鲸,我揣著相機(jī)與錄音筋讨,去河邊找鬼。 笑死摸恍,一個(gè)胖子當(dāng)著我的面吹牛悉罕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播立镶,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼壁袄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了媚媒?” 一聲冷哼從身側(cè)響起嗜逻,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缭召,沒(méi)想到半個(gè)月后栈顷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嵌巷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年萄凤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搪哪。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靡努,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晓折,到底是詐尸還是另有隱情惑朦,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布漓概,位于F島的核電站漾月,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胃珍。R本人自食惡果不足惜梁肿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堂鲜。 院中可真熱鬧栈雳,春花似錦护奈、人聲如沸缔莲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痴奏。三九已至蛀骇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間读拆,已是汗流浹背擅憔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留檐晕,地道東北人暑诸。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辟灰,于是被迫代替她去往敵國(guó)和親个榕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容