无法将 '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

希望对您有所帮助,如有不明之处请追问。