亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

swift 錯誤處理do catch try try!使用詳解

 更新時間:2023年03月16日 08:15:11   作者:mp624183768  
這篇文章主要介紹了swift 錯誤處理do catch try try!使用詳解的相關(guān)資料,需要的朋友可以參考下

在swift中 如果我們要定義一個表示錯誤類型非常簡單,只要遵循Error協(xié)議就可以了,我們通常用枚舉或者結(jié)構(gòu)體來表示錯誤類型,枚舉可能用的多些,因?yàn)樗芨庇^的表達(dá)當(dāng)前錯誤類型的每種錯誤細(xì)節(jié)。

//
//  AboutError.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright ? 2020 liuan. All rights reserved.
//

import Foundation
enum VendingMachingError:Error{
    case invalideSelection
    case insufficientFunds(coinsNeeded:Int)
    case outOfStock
}

函數(shù)、方法和初始化器都可以拋出錯誤。需要在參數(shù)列表后面,返回值加throws 關(guān)鍵字。

簡化版

func canThrowErrors() throws -> String
//
//  AboutError.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright ? 2020 liuan. All rights reserved.
//

import Foundation
enum VendingMachingError:Error{
    case invalideSelection
    case insufficientFunds(coinsNeeded:Int)
    case outOfStock
}
struct Item {
    var price: Int
    var count: Int
}

class VendingMathine{
    var inventory=[
        "Candy bar":Item(price: 12, count: 7),
        "Chips":Item(price: 10, count: 4),
        "Pretzels":Item(price: 7, count: 11),
    ]
    
    var coinsDeposited = 0
    func vend(itemNaamed name:String) throws{
        guard let item = inventory[name] else{
            throw VendingMachingError.invalideSelection
        }
        
        guard item.count > 0 else{
            throw VendingMachingError.outOfStock
        }
        guard item.price <= coinsDeposited else{
            throw VendingMachingError.insufficientFunds(coinsNeeded: item.price - coinsDeposited)
             }
        
        coinsDeposited -= item.price
        var newItem = item
        newItem.count -= 1
        inventory[name]=newItem
        print("Dispensing \(name)")
        
    }
}


let vm=VendingMathine()

vm.coinsDeposited=2
try vm.vend(itemNaamed: "Pretzels")

拋出異常

Playground execution terminated: An error was thrown and was not caught:
? VendingMachingError
  ? insufficientFunds : 1 element
    - coinsNeeded : 5

在Swift中我們使用do-catch塊對錯誤進(jìn)行捕獲,當(dāng)我們在調(diào)用一個throws聲名的函數(shù)或方法時,我們必須把調(diào)用語句放在do語句塊中,同時do語句塊后面緊接著使用catch語句塊

swift 錯誤處理do catch try try! defer_ci

do里面執(zhí)行調(diào)用語句

后面跟著catch 第一種錯誤 在第一種錯誤里面做處理

第二種錯誤需要符合一定的條件

然后做錯誤處理

第三種是沒有捕獲到的錯誤 然后在第三個語句里面做處理

swift 錯誤處理do catch try try! defer_ide_02

如果你確信一個函數(shù)或者方法不會拋出錯誤,可以使用try! 來中斷錯誤的傳播,但是如果錯誤真的發(fā)生了。你會得到一個運(yùn)行時錯誤

//
//  AboutError.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright ? 2020 liuan. All rights reserved.
//

import Foundation
let photo = try! 5/0
warning: BlackMyPlayground.playground:10:19: warning: no calls to throwing functions occur within 'try' expression
let photo = try! 5/0
                  ^

warning: BlackMyPlayground.playground:10:19: warning: no calls to throwing functions occur within 'try' expression
let photo = try! 5/0
                  ^

error: BlackMyPlayground.playground:10:19: error: division by zero
let photo = try! 5/0
                  ^

defer關(guān)鍵字:defer block 例的代碼會在函數(shù)return之前執(zhí)行,無論函數(shù)是從哪個分之return的,還有throw,還是自然而然走到最后一樣。

//
//  File.swift
//  learn_swiftUi
//
//  Created by liuan on 2020/9/4.
//  Copyright ? 2020 liuan. All rights reserved.
//

import Foundation

func processFile(fileName: String)throws{
    defer{
        print("JIESHU")
    }
   print("KAISHI ")
 
}

到此這篇關(guān)于swift 錯誤處理do catch try try!使用詳解的文章就介紹到這了,更多相關(guān)swift 錯誤處理do catch try try!內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)

    Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)

    這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift用final關(guān)鍵字來防止重寫

    Swift用final關(guān)鍵字來防止重寫

    final關(guān)鍵字在大多數(shù)的編程語言中都存在,表示不允許對其修飾的內(nèi)容進(jìn)行繼承或者重新操作。下面通過實(shí)例代碼給大家介紹swift用final關(guān)鍵字來防止重寫
    2016-12-12
  • Swift教程之類與結(jié)構(gòu)詳解

    Swift教程之類與結(jié)構(gòu)詳解

    這篇文章主要介紹了Swift教程之類與結(jié)構(gòu)詳解,本文講解了類和結(jié)構(gòu)的異同、結(jié)構(gòu)和枚舉類型是數(shù)值類型、類是引用類型、如何選擇使用類還是結(jié)構(gòu)、集合類型的賦值和復(fù)制操作等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Swift 如何讓ScrollView滾動到具體某個位置

    Swift 如何讓ScrollView滾動到具體某個位置

    這篇文章主要介紹了Swift 如何讓ScrollView滾動到具體某個位置,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記

    Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記

    這篇文章主要介紹了Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記,Optional鏈?zhǔn)荢wift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-07-07
  • swift學(xué)習(xí)文檔(筆記)

    swift學(xué)習(xí)文檔(筆記)

    這篇文章主要介紹了學(xué)習(xí)swift的筆記,swift最近也比較熱,需要的朋友可以參考下
    2014-09-09
  • 在 Swift 中測試 UIAlertController的方法

    在 Swift 中測試 UIAlertController的方法

    這篇文章主要介紹了在 Swift 中測試 UIAlertController的方法的,需要的朋友可以參考下
    2015-10-10
  • Swift心得筆記之集合類型

    Swift心得筆記之集合類型

    本文為大家講解的是swift語言中的集合類型數(shù)據(jù),這是swift開發(fā)必須掌握的知識點(diǎn),感興趣的同學(xué)參考下。
    2015-04-04
  • 詳談swift內(nèi)存管理中的引用計數(shù)

    詳談swift內(nèi)存管理中的引用計數(shù)

    下面小編就為大家?guī)硪黄斦剆wift內(nèi)存管理中的引用計數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • swift在IOS應(yīng)用圖標(biāo)上添加提醒個數(shù)的方法

    swift在IOS應(yīng)用圖標(biāo)上添加提醒個數(shù)的方法

    本文是通過swift語言實(shí)現(xiàn)在應(yīng)用圖標(biāo)右上角添加消息個數(shù)提醒的功能,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧
    2016-08-08

最新評論