Swift4 异常处理Try_Catch的使用之初见

前言

从OC转Swift了。虽然Swift的官方语法的资料看了2遍了。还是在使用的时候遇到点问题。 好记性,不如烂笔头。本篇不是高深的内容。只是作为初使用的记录。

当想给一个函数使用try-catch。需要在函数后加个throws。具体使用,如下 先有个错误的枚举

enum ErrorType:Error{
    case ErrorTypeNil
    case ErrorType1
}
复制代码

这里需要函数出错会抛出错误的情况,记住后面要加throws

func largerThanEighteenthFunc(a:Int16?) throws {
    if let need = a ,need >= 18{
        print("need >>>> \(need)")
        throw  ErrorType.ErrorTypeNil
    }else{
        print("need <=18")
        throw  ErrorType.ErrorType1
    }
}
复制代码

不需要捕抓错误,可以使用try!或try?。但是不建议不建议使用try!,使用try?会更加安全。因为如果当有错误捕抓到时,程序会直接崩溃

func notPrintError() {
        try? largerThanEighteenthFunc(a: nil)
    }


复制代码

如果只包含一个catch语句,那么所有的错误都会在这个catch中执行,能够捕抓其错误信息

 func oneCondition() {
        do {
            try largerThanEighteenthFunc(a: 9)
        } catch let error {
            print("error >>> \(error)")
        }
    }
复制代码

在使用catch时,我们想它是能够进行模式匹配的、能够进行更精准的错误匹配处理。可以穷举多种情况。

func twoCondition() {
    do {
        try largerThanEighteenthFunc(a: 20)
    } catch ErrorType.ErrorTypeNil {
        print(ErrorType.ErrorTypeNil)
    } catch ErrorType.ErrorType1 {
        print(ErrorType.ErrorType1)
    } catch { // 加入一个空的catch,用于关闭catch。否则会报错:Errors thrown from here are not handled because the enclosing catch is not exhaustive
    }
}
复制代码

注意:在使用do-catch的时候。无论是不是把错误都穷举完,一定要写个空catch,不然会报错。 这个错误就是

Errors thrown from here are not handled because the enclosing catch is not exhaustive

友情连接:

转载于:https://juejin.im/post/5bd280056fb9a05cfa300850

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SwiftUI是苹果公司推出的一款全新的UI框架,可以用于开发iOS、iPadOS、macOS、watchOS等操作系统上的应用程序。在SwiftUI中,开发者可以使用简单易懂的语法和组件来构建应用程序的UI界面,同时也可以方便地实现各种交互效果和动画效果。 对于视频播放器的开发,SwiftUI也提供了相关的组件和API,可以轻松实现视频的播放和控制。同时,SwiftUI也提供了对核心图像的实时处理支持,开发者可以使用Metal等技术对视频图像进行实时处理,实现各种特效和滤镜效果。 在SwiftUI中,实现视频播放器可以使用`AVPlayer`和`AVPlayerLayer`等组件,同时也可以使用`VideoPlayer`组件快速构建一个基本的视频播放器。对于实时处理核心图像,可以使用`MTKView`组件和`MetalPerformanceShaders`框架来实现。 下面是一个示例代码,演示如何使用SwiftUI实现一个简单的视频播放器,并对视频进行实时处理: ```swift import SwiftUI import AVKit import MetalKit import MetalPerformanceShaders struct VideoPlayerView: UIViewRepresentable { let player: AVPlayer let filter: MPSImageGaussianBlur func makeUIView(context: Context) -> some UIView { let playerLayer = AVPlayerLayer(player: player) playerLayer.videoGravity = .resizeAspectFill playerLayer.frame = UIScreen.main.bounds let metalView = MTKView(frame: UIScreen.main.bounds) metalView.device = MTLCreateSystemDefaultDevice() metalView.colorPixelFormat = .bgra8Unorm let commandQueue = metalView.device?.makeCommandQueue() let textureDescriptor = MTLTextureDescriptor.texture2DDescriptor( pixelFormat: .bgra8Unorm, width: Int(metalView.frame.width), height: Int(metalView.frame.height), mipmapped: false) let texture = metalView.device?.makeTexture(descriptor: textureDescriptor) filter.encode(commandBuffer: commandQueue!.makeCommandBuffer()!, sourceTexture: texture!, destinationTexture: texture!) metalView.texture = texture let stackView = UIStackView(frame: UIScreen.main.bounds) stackView.axis = .vertical stackView.distribution = .fillEqually stackView.addArrangedSubview(playerLayer) stackView.addArrangedSubview(metalView) return stackView } func updateUIView(_ uiView: UIViewType, context: Context) { } } struct ContentView: View { let player: AVPlayer var body: some View { VideoPlayerView(player: player, filter: MPSImageGaussianBlur(device: MTLCreateSystemDefaultDevice()!, sigma: 10.0)) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView(player: AVPlayer(url: URL(string: "https://example.com/video.mp4")!)) } } ``` 在上面的示例代码中,`VideoPlayerView`是一个UIViewRepresentable,用于将AVPlayer和实时处理的MetalView结合起来。在`makeUIView`方法中,首先创建一个AVPlayerLayer和一个MTKView,并将它们添加到一个UIStackView中。然后,创建一个MPSImageGaussianBlur实例,并使用MetalPerformanceShaders框架对视频图像进行高斯模糊处理,最后将处理结果渲染到MTKView中。 在`ContentView`中,创建AVPlayer实例并将其传递给VideoPlayerView。通过这种方式,可以轻松实现一个支持实时处理核心图像的视频播放器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值