最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

swift 錯(cuò)誤處理do catch try try!使用詳解

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

在swift中 如果我們要定義一個(gè)表示錯(cuò)誤類型非常簡單,只要遵循Error協(xié)議就可以了,我們通常用枚舉或者結(jié)構(gòu)體來表示錯(cuò)誤類型,枚舉可能用的多些,因?yàn)樗芨庇^的表達(dá)當(dāng)前錯(cuò)誤類型的每種錯(cuò)誤細(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ù)、方法和初始化器都可以拋出錯(cuò)誤。需要在參數(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塊對(duì)錯(cuò)誤進(jìn)行捕獲,當(dāng)我們在調(diào)用一個(gè)throws聲名的函數(shù)或方法時(shí),我們必須把調(diào)用語句放在do語句塊中,同時(shí)do語句塊后面緊接著使用catch語句塊

swift 錯(cuò)誤處理do catch try try! defer_ci

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

后面跟著catch 第一種錯(cuò)誤 在第一種錯(cuò)誤里面做處理

第二種錯(cuò)誤需要符合一定的條件

然后做錯(cuò)誤處理

第三種是沒有捕獲到的錯(cuò)誤 然后在第三個(gè)語句里面做處理

swift 錯(cuò)誤處理do catch try try! defer_ide_02

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

//
//  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 例的代碼會(huì)在函數(shù)return之前執(zhí)行,無論函數(shù)是從哪個(gè)分之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 錯(cuò)誤處理do catch try try!使用詳解的文章就介紹到這了,更多相關(guān)swift 錯(cuò)誤處理do catch try try!內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

南充市| 曲阳县| 聂拉木县| 安徽省| 襄城县| 武城县| 沁阳市| 高邮市| 鹿邑县| 阜宁县| 宝丰县| 萝北县| 阜平县| 隆子县| 平阴县| 平和县| 八宿县| 胶州市| 湘西| 丹巴县| 高邮市| 白水县| 衢州市| 前郭尔| 巨鹿县| 光山县| 定结县| 珲春市| 宾川县| 乌拉特后旗| 漠河县| 绥宁县| 绥江县| 涞水县| 泰来县| 鄄城县| 绿春县| 沽源县| 金山区| 常德市| 莎车县|