Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.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

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 铸造;作为?Int";在Swift中,对于不同的数字会产生不同的结果_Ios_Swift_Casting_Null - Fatal编程技术网

Ios 铸造;作为?Int";在Swift中,对于不同的数字会产生不同的结果

Ios 铸造;作为?Int";在Swift中,对于不同的数字会产生不同的结果,ios,swift,casting,null,Ios,Swift,Casting,Null,我有一个iOS应用程序,它工作得很好,直到某个时候它开始在某个特定数字的nil值上崩溃 在我的代码中进行了一些测试之后,我设法将其归结为以下代码段,该代码段产生的输出对我来说毫无意义: let tc: AnyObject? = jsonObject["times_completed"] let pos: AnyObject? = jsonObject["position"] println("TC FROM JSON \(tc)") println("POS FROM JSON \(pos)"

我有一个iOS应用程序,它工作得很好,直到某个时候它开始在某个特定数字的
nil
值上崩溃

在我的代码中进行了一些测试之后,我设法将其归结为以下代码段,该代码段产生的输出对我来说毫无意义:

let tc: AnyObject? = jsonObject["times_completed"]
let pos: AnyObject? = jsonObject["position"]

println("TC FROM JSON \(tc)")
println("POS FROM JSON \(pos)")

println("TC TYPE: \(_stdlib_getDemangledTypeName(tc))")
println("POS TYPE: \(_stdlib_getDemangledTypeName(pos))")

let tcInt = tc as? Int
let posInt = pos as? Int

println("TC TYPE: \(_stdlib_getDemangledTypeName(tcInt))")
println("POS TYPE: \(_stdlib_getDemangledTypeName(posInt))")

println("TC: \(tcInt)")
println("POS: \(posInt)")
输出:

TC FROM JSON Optional(648)
POS FROM JSON Optional(6)

TC TYPE: Swift.Optional<Swift.AnyObject>
POS TYPE: Swift.Optional<Swift.AnyObject>

TC TYPE: Swift.Optional<Swift.Int>
POS TYPE: Swift.Optional<Swift.Int>

TC: nil
POS: Optional(6)
但这意味着我必须重新提交我的应用程序,这需要一些时间。我希望通过(暂时)更改
完成时间的值来避免这种情况

有人能解释一下这里发生了什么吗?谢谢


更新:

还请检查下面的JSON片段。它似乎不是一个字符串,而是一个数字。键是一个字符串,但这有关系吗

...
position = 6;
slug = "my-quiz";
"times_completed" = 648;
...

我认为
jsonObject[“times_completed”]
返回一个字符串值,并将字符串视为
let tcInt=tcas中的Int?Int
导致出现问题。 注意

var a : AnyObject? = 10
var b : AnyObject? = "10"

println(a)
println(b)

在这两种情况下打印可选(10)。尝试将其转换为字符串并检查结果
let tcInt=tcas?字符串
。如果这是正确的,不要担心,你的应用程序不会因为你的错误而崩溃,也许后端发生了一些变化

你的
jsonObject[“times_completed”]
似乎是一个字符串而不是数字

因为
.integerValue
适用于您,所以证明了它是一个
NSString
属性

字符串
强制转换为
Int将崩溃

您也可以这样做:

let tcInt = (jsonObject["times_completed"] as? String)?.toInt()

nil的结果可能是因为
jsonObject[“times_completed”]
无法转换为Int。 尝试将其转换为字符串或其他类型

if let tcStr = jsonObject["times_completed"] as? String {
    // string...
}

请检查我的更新,以确保它不是字符串。另外:这段代码以前是有效的。结果是后端在没有通知我或测试的情况下被更改了。毕竟它已经变成了一个字符串。我想控制台上的“漂亮”印刷给了我错误的印象。谢谢各位。
if let tcStr = jsonObject["times_completed"] as? String {
    // string...
}