Как получить userInfo из NSError в предложении catch

Если у меня есть метод метания, например:

func doSomethingWithString(string:String) throws {
  guard string.characters.count > 0 else {
    throw NSError(domain: "CustomErrorDomain", code: 42, userInfo: ["foo" : "bar"])
  }
  // Do something with string...
}

Затем я пытаюсь вызвать его и прочитать userInfo:

do {
  try doSomethingWithString("")
} catch let error as NSError {
  print(error.domain)
  print(error.code)
  print(error.userInfo)
}

... он возвращается как пустой словарь (но домен и код заполнены правильно):

CustomErrorDomain
42
[:]

Но если я добавлю этот дополнительный шаг:

do {
  try doSomethingWithString("")
} catch let e {
  let error = e as NSError
  print(error.domain)
  print(error.code)
  print(error.userInfo)
}

...оно работает:

CustomErrorDomain
42
[foo: bar]

Кто-нибудь знает, почему это может быть?

К вашему сведению - я использую Xcode 7 beta 2 (7A121l)


person ganzogo    schedule 03.07.2015    source источник
comment
Очень интересно... Не знаю, почему такое могло произойти   -  person Kametrixom    schedule 03.07.2015
comment
Я считаю это ошибкой, отправьте радар на bugreport.apple.com.   -  person zrzka    schedule 03.07.2015
comment
Хорошо, @RobertVojta. Я сейчас подал радар.   -  person ganzogo    schedule 03.07.2015
comment
Это исправлено в Xcode 7 Beta 4. Теперь работает.   -  person zrzka    schedule 23.07.2015


Ответы (1)