🍁

Swift: 即席でErrorをthrowする

2024/05/01に公開

足跡でErrorthrowしたくなった時のメモ

1.Frameworkに既存のErrorがあれば使う

import Foundation

func some() throws {
    throw CocoaError(.featureUnsupported)
}

のように返せるので簡単です。

サッと調べたもの。

Framework Error Type
AVFoundation AVError
FileProvider NSFileProviderError
Foundation CocoaError
URLError
LocalAuthentication LAError
PassKit PKPassKitError
PKPaymentError
SafetyKit SAError
ShazamKit SHError
SystemExtensions OSSystemExtensionError
UIKit UIPrintError
UISceneError
UserNotifications UNError
VideoSubscriberAccount VSError
Virtualization VZError

Apple DeveloperのページでerrorDomainCodeと検索すれば存在の調査可能です。
https://developer.apple.com/search/?q=errorDomain&type=Documentation

2.Swiftに標準である既存のErrorを使う

  • CancellationError
  • DecodingError
  • EncodingError
  • Never

など

3.StringをErrorに準拠させる

パターン1
extension String: Error {}
パターン2
extension String: LocalizedError {
    public var errorDescription: String? { self }
}

4.普通にエラーを定義する

パターン1
enum SomeError: Error {
    case unknown
}
パターン2
struct SomeError: LocalizedError {
    var errorDescription: String? = "unknown error"
}
パターン3
struct SomeError: Error & CustomStringConvertible {
    let description: String = "unknown error"
}

Discussion