Arrays Swift:线程1:信号SIGABRT(获取任何对象的子对象)

Arrays Swift:线程1:信号SIGABRT(获取任何对象的子对象),arrays,swift,anyobject,Arrays,Swift,Anyobject,我的代码: let userData = result["user"] as? AnyObject // { test="x"; id=0; phone="none" } var id = Int(userData?["id"] as? String ?? String(userData?["id"] as? String ?? "0"))! 编译后,我出现以下错误: 2018-07-16 18:21:02.747944+0430 Matap[1550:415553]-[\uu nscfn编

我的代码:

let userData = result["user"] as? AnyObject // { test="x"; id=0; phone="none" }

var id = Int(userData?["id"] as? String ?? String(userData?["id"] as? String ?? "0"))!
编译后,我出现以下错误:

2018-07-16 18:21:02.747944+0430 Matap[1550:415553]-[\uu nscfn编号 长度]:发送到实例0xb000000000000003的无法识别的选择器 2018-07-16 18:21:02.748116+0430 Matap[1550:415553]*终止应用程序 由于未捕获的异常“NSInvalidArgumentException”,原因: '-[\uu NSCFNumber length]:发送到实例的选择器无法识别 0xb000000000000003' *第一次抛出调用堆栈:(0x183c82d8c 0x182e3c5ec 0x183c90098 0x183c885c8 0x183b6e41c 0x105d9d5f4 0x105d36c68 0x106384478 0x1020a4aa0 0x10209f6cc 0x10208ac00 0x10676d1dc 0x10676d19c 0x106771d2c 0x183c2b070 0x183c28bc8 0x183b48da8 0x185b2d020 0x18db65758 0x1020c9098 0x1835d9fc0)libc++abi.dylib:终止于 NSException类型的未捕获异常


id是
NSNumber

var id =  (userData?["id"] as! NSNumber).stringValue // seems you consider it a string  
  • result[“user”]
    不是
    AnyObject
    ,根据输出,它显然是一个字典(
    [String:Any]
  • userData[“id”]
    是一个
    Int
发生错误的原因是您将数字视为字符串


一行代码似乎很酷,但有时最好多使用几行代码以提高可读性
-[\uu NSCFNumber length]:无法识别的选择器
,这是一个众所周知的错误。在某种程度上,您认为您正在使用一个字符串对象,但实际上它是一个
NSNumber
one。为什么你要做两次
userData?[“id”]as?字符串
?括号问题?相反,一些测试在一行中进行了那么多,一步一步,用if/else一行一行地进行,然后找出是哪一个导致了问题?我不能用你的代码重现同样的崩溃。您确定崩溃发生在您显示的任何一行上吗?我再次遇到此错误:
2018-07-16 19:16:12.554696+0430 Matap[733:234358]-[\uu NSCFNumber length]:未识别的选择器发送到实例0xb000000000000003 2018-07-16 19:16:12.556471+0430 Matap[733:234358]***由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\uu NSCFNumber length]:发送到实例0xb000000000000003的无法识别的选择器***第一次抛出调用堆栈:(0x182bd2d8c 0x181d8c5ec 0x182be0098)libc++abi.dylib:如果他将NSException类型的未捕获异常转换为AnyObject@Sh_Khan这确实会有所不同。对
AnyObject
的转换连接到Objective-C运行时,在这种情况下完全不需要。在Swift中,一个明显的JSON对象是
Any
,但我们鼓励您始终将对象转换为最特定的类型。我的意思是结果不会更好approach@Sh_Khan对我来说,更好的方法总是比结果更重要