无法将“__NSCFBoolean”(0x100b123b8)类型的值转换为“NSString”(0x100f0ab48)
Posted
技术标签:
【中文标题】无法将“__NSCFBoolean”(0x100b123b8)类型的值转换为“NSString”(0x100f0ab48)【英文标题】:Could not cast value of type '__NSCFBoolean' (0x100b123b8) to 'NSString' (0x100f0ab48) 【发布时间】:2016-07-30 19:20:17 【问题描述】:我正在尝试解析一个 .json 文件,但我以为我快结束了,发生了错误:
无法将“__NSCFBoolean”(0x10c8ba3b8) 类型的值转换为“NSString”(0x10ccb2b48)。
我已经完成了我的研究,我发现(惊讶地)我的 .json 中有一些布尔值在字符串的舞台上乱七八糟...
那么我该如何避免这种情况呢?在尝试将 bar["tags"] 放入 String 之前,我已经查找了一些方法可以给我 bar["tags"] 的类型,但我找不到..
这是 .json 和我的(太长的)代码的摘录:
...
"id": 3906,
"address": "L\u2019Hotel le 123 Sebastopol 23, boulevard S\u00e9bastopol, Paris, 75002, Le Louvre, Paris",
"name": "123 Sebastopol",
"url": "/bar/paris/le-louvre/123-sebastopol",
"image_url": "https://prh-wbb-prod.s3.amazonaws.com/generic_640_480/WBB%20holding%20image3_54abcf7d218d1_55b8d2128eabb.jpg",
"tags": "Hotel, Cocktail, Terrace",
"latitude": 48.867598851356,
"longitude": 2.3533117460327
,
"id": 1523,
"address": "73 Rue d\u0027Aboukir, 75002 Paris, France, Le Louvre, Paris",
"name": "Lockwood",
"url": "/bar/paris/le-louvre/lockwood",
"image_url": "https://prh-wbb-prod.s3.amazonaws.com/bar_640_480/lockwood_001_553f5b2c99f4b.jpg",
"tags": false,
"latitude": 48.867716087563,
"longitude": 2.3469846706722
...
我的代码:
id = (bar["id"] as? Int)!
name = (bar["name"] as? String)!
adress = (bar["address"] as? String)!
url = (bar["url"] as? String)!
image_url = (bar["image_url"] as? String)!
tags = (bar["tags"] as? String)!
latitude = (bar["latitude"] as? Double)!
longitude = (bar["longitude"] as? Double)!
【问题讨论】:
在您的 JSON"tags": false,
中。这是导致错误的原因。
您的第一个存根将 tags 显示为字符串,第二个存根将其显示为布尔值。这就是错误的原因。
这一行会引发错误 tags = (bar["tags"] as?String)! “标签”应该是一个字符串(200/208)所以我只想用一个空字符串替换 false
【参考方案1】:
嗯,好像我没有做足够的研究!
解决办法如下:
if let test = bar["tags"] as? String
tags = (bar["tags"] as? String)!
else
tags=" "
【讨论】:
【参考方案2】:您正在尝试将 Bool
值 - false - 解析为 String
的实例。
将您的代码更改为:
id = (bar["id"] as? Int)!
name = (bar["name"] as? String)!
adress = (bar["address"] as? String)!
url = (bar["url"] as? String)!
image_url = (bar["image_url"] as? String)!
tags = (bar["tags"] as? Bool)!
latitude = (bar["latitude"] as? Double)!
longitude = (bar["longitude"] as? Double)!
【讨论】:
【参考方案3】:当我决定在 Swift3 下解析 JSON 并且没想到结果是 Bool 时,我遇到了类似的问题。
这是我的代码,希望它能帮助像我这样不喜欢 Swift 3 的人。
在我的情况下,JSON 输出中的条目是
success = 0;
注意它没有 "" 围绕 success 或 0 像这样
"success" = "0"
这是我用来从 JSON 输出中获取 Bool 值的代码
success = 0
注意没有“”
let jsonResult = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if (jsonResult?["success"] as? Bool)!
okToLogIn = true
print(okToLogIn)
else
okToLogIn = false
print(okToLogIn)
所以我只是将它保留为 Bool 并检查真假,我的代码现在可以正常工作了。
【讨论】:
以上是关于无法将“__NSCFBoolean”(0x100b123b8)类型的值转换为“NSString”(0x100f0ab48)的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server Management Studio 无法将类型为“System.__ComObject
无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端
C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable
无法将类型为“System.Collections.Generic.List`1[EPMS.Domain.SingleItem]”的对象强制转换为类型“EPMS