Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift,将对象强制转换为字符串,结果为零_Ios_Swift_Casting - Fatal编程技术网

Ios Swift,将对象强制转换为字符串,结果为零

Ios Swift,将对象强制转换为字符串,结果为零,ios,swift,casting,Ios,Swift,Casting,我在将两个字典值转换为字符串时遇到了一些问题,现在感觉像是几个小时了,基本上我得到的是套接字数据通知!。userInfo,我需要与facebook数据进行交叉检查,因此我需要将键值转换为字符串 下面我有两个值,我需要检查它们是否相等,我认为将它们转换为string将得到相同的结果,但其中一个变为nil。谁能给我指点一下我可能在哪里出了差错 我已经标记了值1和2,以便于遵循 let data: Dictionary = notification!.userInfo!["data"]![0] as

我在将两个字典值转换为字符串时遇到了一些问题,现在感觉像是几个小时了,基本上我得到的是套接字数据通知!。userInfo,我需要与facebook数据进行交叉检查,因此我需要将键值转换为字符串

下面我有两个值,我需要检查它们是否相等,我认为将它们转换为string将得到相同的结果,但其中一个变为nil。谁能给我指点一下我可能在哪里出了差错

我已经标记了值1和2,以便于遵循

let data: Dictionary = notification!.userInfo!["data"]![0] as Dictionary<NSObject, AnyObject>

println(data["users"]?["fb_id"]!) //1.
println(FacebookManager.instance.user!["id"]) //2.

println(data["users"]!["fb_id"]! as? String) //1. This is the cast that fails
println(FacebookManager.instance.user!["id"] as? String) //2.
如果我用“\u stdlib\u getTypeName”打印对象,我会得到

所以肯定有一些不同,但我不确定是什么

编辑: 如果我将它们转换为NSNumber,则先前失败的一个将起作用,而另一个失败的将变为零 我不知道这是否能让事情变得更清楚

编辑2:
如果我将失败的值强制转换为NSString,然后获取.stringValue,它将工作。在Swift中处理字典值是否应该总是如此复杂?

U stdlib_getTypeName输出没有告诉我们任何信息。根据,这两种类型都代表隐式展开的可选类型。看起来fb_id是一个NSNumber,您不能像以前那样将NSNumber强制转换为字符串。您必须调用.stringValue,因为您正在处理一个ObjC对象。您可以使用一行代码来完成:data[users]?[fb_id]?.stringValue,但这很好。您确实需要停止使用force unwrap操作符!处处它迟早会回来咬你的。使用if-let或者更好的Optional.mapAh,所以你一直都在说它是一个NSNumber,谢谢你澄清了这一点,我对iOS开发还是很陌生的。至于这个!运营商,我可以完全控制我的后端以及我从facebook获得的信息,所以这不应该成为问题。不过,由于只是调试,我确实不必要地使用了它,谢谢你的提示!啊,我现在明白了,S=Swift,Q=Optional。那么有没有办法知道swift中的基本类是什么呢?一直在寻找一个公平的时间,现在无法找到任何不会导致上述或16个字符的十六进制值
Optional(10202362731884832) //1.
Optional(10202362731884832) //2.
nil //1.
Optional("10202362731884832") //2.
_TtSq //1.
_TtSQ //2.