В проекте Tests у меня есть расширения с некоторыми вспомогательными функциями тестирования. Как это:
extension Employee {
static func mockDict() -> Dictionary<String, Any>! {
return ["ID": arc4random() % 1000,
"FirstName": "Employee First Name",
...]
}
}
(Я удалил ненужный код). У меня проблема с доступом к ID из этого словаря по неизвестной пока причине. У меня SIGABRT 6 при кастинге
employeeDict["ID"] as! Int
Консоль отладчика Xcode также не любит это конкретное целое число:
Струны работают нормально. Вы сталкивались с такой проблемой? Любые идеи?
РЕДАКТИРОВАТЬ: На всякий случай кто-то тоже столкнется с этой проблемой. ПРИВЕДЕНИЕ ИЗ UInt32/Int32 В Int НЕ УДАЕТСЯ ПО ДИЗАЙНУ. Даже если объект был преобразован в Any
или Anyobject
между ними. Несмотря на то
@available(*, message: "Converting UInt32 to Int will always succeed.")
public init?(exactly value: UInt32)
в декларации Int
public struct Int : SignedInteger, Comparable, Equatable {
...
}
а также
public struct Int32 : SignedInteger, Comparable, Equatable {
...
}
РЕДАКТИРОВАТЬ 2 для тех, кто может столкнуться с таким поведением при сериализации JSON. Да, сериализация завершается с ошибкой NSInvalidArgumentException
Invalid type in JSON write (_SwiftValue)
, если запрашивается сериализация UInt32, Int64 или любого экземпляра протокола Integer, отличного от Int