我Bus Error
在运行看起来非常安全的swift代码时会感到奇怪.我试图将其减少到最小的测试用例,如下所示:
Apple Swift version 2.2-dev (LLVM 3ebdbb2c7e, Clang f66c5bb67b, Swift 0ddf238ad7) Target: x86_64-apple-macosx10.9
这段代码:
public enum MyError: ErrorType { case SomeError(code: Int) } public typealias MyType = () throws -> Bool public class Foo { var a:MyType = { () throws -> Bool in print("A") return true } var b:MyType = { () throws -> Bool in print("B") return true } var c:MyType = { () throws -> Bool in print("C") throw MyError.SomeError(0) } } public func handle(test:T) { let mirror = Mirror(reflecting: test) print(mirror.subjectType) for child in mirror.children { if let callable = child.value as? MyType { do { try callable() } catch MyError.SomeError(let id) { print(id) } catch { print("unknown error") } } } } let foo = Foo() handle(foo)
生成此输出:
Foo A B C Bus error: 10
在调试器中运行它可以正常工作,所以我认为它与运行时的时序问题有关.
我在这段代码中做了非法或不安全的事情吗?
在闭包中异常是否有些违法?
是什么导致了这个错误?
编辑:
我现在在swift问题跟踪器上创建了一个错误:https://bugs.swift.org/browse/SR-324