无法将 'SwiftyJSON.JSON' 类型的值转换为 'Swift.String'
Could not cast value of type 'SwiftyJSON.JSON' to 'Swift.String'
我一直在尝试显示从 JSON 解析到 UITableView
的数据。
我使用 SwiftyJSON
解析数据,然后将数组传递给另一个控制器。
我使用 NSArray
将 JSON 强制为一个数组。当我打印传递的数据时,它显示如下:
(
"string one",
"string two"
)
然后里面
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
函数,我用了
let urls: String = sshoString[indexPath.item] as! String
当我在函数 cellForItemAt
中打印数组而不强制类型为字符串时,它会打印以下内容:
string one
string two
但是当我强制类型为 String 时它崩溃并显示以下内容:
Could not cast the value of type 'SwiftyJSON.JSON' to 'Swift.String'.
如何实现?如何强制它成为一个字符串?
根据要求:
var featuredScreenshots:NSArray = NSArray()
var featuredssho = NSMutableArray()
for items in json["featured"].arrayValue {
featuredssho.add(items["screenshots"].arrayValue)
}
self.featuredScreenshots = featuredssho as NSArray
然后我把它传给了另一个控制器:
let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailsView") as! DetailsView
vc.sshoString = featuredScreenshots[indexPath.row] as! NSArray
在 SwiftyJSON returns 中访问 JSON 类型的元素 JSON
.
为了获得您正在寻找的类型,您需要像这样使用 JSON 类型的包含属性:
let urls: String = sshoString[indexPath.item].string!
With SwiftyJSON .string
是可选类型 String?
,这就是为什么我将力展开放在那里的原因。一般来说,应该避免强制解包,所以我建议按照以下思路做一些事情:
if let urls = sshoString[indexPath.item].string {
//urls is now type String, and you can use it as needed
}
我建议查看 SwiftyJSON 的文档,因为它更详细并显示了使用 .int
、.bool
、.url
等的其他示例,以获取您正在寻找的值。
是的,有时您需要将 JSON 值分配给标准类型值,例如 String 或 Dictionary 等。基本上如上所述,根据 swiftyJson 文档,它有自己的转换方式,如 .dicitonary、.stringvalue 等。 但问题是编译器无法读取我们在编译时作为 JSON 类型分配的值 所以只能强制转换它作为 JSON 然后使用 swiftyJson 方式来满足所需的值类型,例如:
结构 NormalStringName
{
变量名称:字符串!
}
并且我们从后端或任何地方用 swiftyJSON 解析了 nameValue,因此将 nameValue 分配给我们的结构实例期望正常字符串我们这样做:
_ = NormalStringName(名称:(nameValue as!JSON).stringValue
希望对您有所帮助,如有不明之处请追问。
我一直在尝试显示从 JSON 解析到 UITableView
的数据。
我使用 SwiftyJSON
解析数据,然后将数组传递给另一个控制器。
我使用 NSArray
将 JSON 强制为一个数组。当我打印传递的数据时,它显示如下:
(
"string one",
"string two"
)
然后里面
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
函数,我用了
let urls: String = sshoString[indexPath.item] as! String
当我在函数 cellForItemAt
中打印数组而不强制类型为字符串时,它会打印以下内容:
string one
string two
但是当我强制类型为 String 时它崩溃并显示以下内容:
Could not cast the value of type 'SwiftyJSON.JSON' to 'Swift.String'.
如何实现?如何强制它成为一个字符串?
根据要求:
var featuredScreenshots:NSArray = NSArray()
var featuredssho = NSMutableArray()
for items in json["featured"].arrayValue {
featuredssho.add(items["screenshots"].arrayValue)
}
self.featuredScreenshots = featuredssho as NSArray
然后我把它传给了另一个控制器:
let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailsView") as! DetailsView
vc.sshoString = featuredScreenshots[indexPath.row] as! NSArray
在 SwiftyJSON returns 中访问 JSON 类型的元素 JSON
.
为了获得您正在寻找的类型,您需要像这样使用 JSON 类型的包含属性:
let urls: String = sshoString[indexPath.item].string!
With SwiftyJSON .string
是可选类型 String?
,这就是为什么我将力展开放在那里的原因。一般来说,应该避免强制解包,所以我建议按照以下思路做一些事情:
if let urls = sshoString[indexPath.item].string {
//urls is now type String, and you can use it as needed
}
我建议查看 SwiftyJSON 的文档,因为它更详细并显示了使用 .int
、.bool
、.url
等的其他示例,以获取您正在寻找的值。
是的,有时您需要将 JSON 值分配给标准类型值,例如 String 或 Dictionary 等。基本上如上所述,根据 swiftyJson 文档,它有自己的转换方式,如 .dicitonary、.stringvalue 等。 但问题是编译器无法读取我们在编译时作为 JSON 类型分配的值 所以只能强制转换它作为 JSON 然后使用 swiftyJson 方式来满足所需的值类型,例如:
结构 NormalStringName
{
变量名称:字符串!
}
并且我们从后端或任何地方用 swiftyJSON 解析了 nameValue,因此将 nameValue 分配给我们的结构实例期望正常字符串我们这样做:
_ = NormalStringName(名称:(nameValue as!JSON).stringValue
希望对您有所帮助,如有不明之处请追问。