我一直在尝试将从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时,它会打印以下内容:
string one
string two
但是当我将类型强制为String时,它会崩溃并显示以下内容:
Could not cast the value of type 'SwiftyJSON.JSON' to 'Swift.String'.
如何做到这一点?如何强制它成为一个字符串?
AS REQUESTED:
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
答案 0 :(得分:1)
在SwiftyJSON中访问JSON的元素会返回类型JSON
。
为了获得您正在寻找的类型,您需要使用JSON类型的包含属性,如下所示:
let urls: String = sshoString[indexPath.item].string!
使用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
等显示其他示例来获取您的值正在寻找。
答案 1 :(得分:1)
是的,有时您需要将JSON值分配给标准类型值,如String或Dictionary ,,等。基本上如上所述并根据swiftyJson文档,它有自己的转换方式,如.dicitonary,.stringvalue ,,,等。 但问题是编译器无法读取我们在编译时分配为JSON类型的值 所以只需将其转换为JSON然后使用swiftyJson方式满足所需值类型,EX:
Struct NormalStringName
{
var name:String!
}
我们从后端或使用swiftyJSON的任何地方解析 nameValue ,以便将 nameValue 分配给我们的结构实例,我们这样做需要正常的字符串:
_ = NormalStringName(name:( nameValue as!JSON).stringValue
希望这会有所帮助,请询问是否不清楚。