🍁

Swift: 即席でErrorをthrowする

に公開

即席でErrorthrowしたくなった時のメモ

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

import Foundation

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

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

サッと調べたもの。

Framework Error Type
AVFoundation AVError
CloudKit CKError
CoreBluetooth CBATTError
CoreHaptics CHHapticError
CoreLocation CLError
CoreSpotlight CSIndexError
CSSearchQueryError
DeviceCheck DCError
EventKit EKError
ExposureNotification ENError
FileProvider NSFileProviderError
GameKit GKError
Foundation CocoaError
URLError
LocalAuthentication LAError
MapKit MKError
MediaPlayer MPError
MultipeerConnectivity MCError
PassKit PKPassKitError
PKPaymentError
SafetyKit SAError
ShazamKit SHError
StoreKit SKError
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