Пользовательское NSError странное поведение Swift

В Swift у меня есть собственный NSError, мне нужно получить словарь userInfo с ошибкой и добавить что-то позже, но в строке назначения он равен нулю, но тогда error.userInfo есть объект ...

С error.userInfo как nil:

class MyError: NSError {

    init(error: NSError) { 
      var newUserInfo = error.userInfo

      ...newUserInfo is nil...
      super.init(...)
    }

}

Если я назначу его 2 раза, он сработает (я знаю, что чего-то не хватает, но что?)

init(error: NSError) { 
  var newUserInfo = error.userInfo
  newUserInfo = error.userInfo

  ...newUserInfo now contains a dictionary...
}

Почему?


person Daniel Gomez Rico    schedule 16.12.2014    source источник
comment
newUserInfo переменная экземпляра или только локальная переменная? Вы, возможно, дважды заявляете об этом?   -  person cmyr    schedule 17.12.2014
comment
Это локальная переменная, и я объявляю ее только там   -  person Daniel Gomez Rico    schedule 17.12.2014
comment
Просто попробовал и без проблем назначил, можешь выложить остальной код.   -  person Logan    schedule 17.12.2014
comment
Как узнать, что это ноль? Ваш код ничего не делает для проверки или регистрации значения.   -  person matt    schedule 17.12.2014


Ответы (1)


Мне это кажется возможно ошибкой компилятора, но об этом трудно сказать, не видя больше вашего кода. Во всяком случае, подобные вещи легче отлаживать, если вы используете условное приведение. userInfo в быстром является Dictionary<NSObject: AnyObject>?; если вы получаете это из API Какао, вы можете сделать что-то вроде:

if let userInfo = error.userInfo as? [NSObject: NSObject] {
    // modify and assign values as necessary
}

это, по крайней мере, прояснит, где что-то ломается.

person cmyr    schedule 16.12.2014
comment
единственная возможная проблема с этим подходом состоит в том, что вы можете получить пустой словарь в том месте, где было бы более полезно понять, что userInfo был равен нулю. - person cmyr; 17.12.2014