ExceptionCatcher

在 Swift 中捕获 Objective-C 异常

许多 Cocoa API 可能会抛出 Swift 无法捕获的异常 (NSKeyedUnarchiverNSTaskNSObject#value(forKey:) 等)。这个包封装了一个 Objective-C 异常处理程序,使其可以捕获此类异常。

捕获异常的功能实际上应该内置到 Swift 中。如果您同意,请复制 这个 Feedback Assistant 报告。

安装

将以下内容添加到 Package.swift

.package(url: "https://github.com/sindresorhus/ExceptionCatcher", from: "2.0.0")

或者在 Xcode 中添加该包。

用法

import Foundation
import ExceptionCatcher

final class Foo: NSObject {}

do {
	let value = try ExceptionCatcher.catch {
		return Foo().value(forKey: "nope")
	}

	print("Value:", value)
} catch {
	print("Error:", error.localizedDescription)
	//=> Error: [valueForUndefinedKey:]: this class is not key value coding-compliant for the key nope.

	debugPrint(error)
	/*
	Error Domain=NSUnknownKeyException Code=0 "[valueForUndefinedKey:]: this class is not key value coding-compliant for the key nope." UserInfo={CallStackSymbols=(
	0   CoreFoundation                      0x00007fff361798ab __exceptionPreprocess + 250
	1   libobjc.A.dylib                     0x00007fff6c3ea805 objc_exception_throw + 48
	2   CoreFoundation                      0x00007fff361a230c -[NSException raise] + 9
	3   Foundation                          0x00007fff388f86c4 -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 222
	4   Foundation                          0x00007fff3876f8fd -[NSObject(NSKeyValueCoding) valueForKey:] + 317
	5   ExceptionCatcherTests               0x0000000103402ef6 $s21ExceptionCatcherTestsAAC9testCatchyyKFypSgyXEfU1_ + 118

	*/
}

相关