当前位置:  开发笔记 > IOS > 正文

为什么迭代关闭会导致swift中的总线错误?

如何解决《为什么迭代关闭会导致swift中的总线错误?》经验,为你挑选了0个好方法。

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

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有