无法转换类型' SwiftyJSON.JSON' to' Swift.String'

时间:2017-07-27 23:57:53

标签: ios json swift3 swifty-json

我一直在尝试将从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

2 个答案:

答案 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

希望这会有所帮助,请询问是否不清楚。