无法转换类型' _SwiftValue'错误

时间:2016-09-17 08:22:09

标签: ios json swift

我试图用我从服务器获取的JSONArray中的数据填充我的数组,并且我使用此代码(swift 3 Xcode 8)执行此操作:

 func parseReservationJson(_ anyObject:Array<AnyObject>){
            nodes.removeAll()
            reservations.removeAll()
            for anyObj in anyObject{
                let client_name = (anyObj["client_name"] as? String) ?? ""
                let client_family  =  (anyObj["client_family"] as? String) ?? ""
                let ft_of_time = ((anyObj["ft_of_time"] as AnyObject as! NSString).substring(to: 5) as NSString)
            }
    }

但我在for声明的最后一行收到此错误:

Could not cast value of type '_SwiftValue' (0x112d8a898) to 'NSString' (0x11003eab8).

出了什么问题?

4 个答案:

答案 0 :(得分:2)

坏点在于:

anyObj["ft_of_time"] as AnyObject

(请检查this。)

如果您确定anyObj["ft_of_time"]属于NSString类型,只需使用as!,否则您应该使用可选绑定:

if let rawFt_of_time = anyObj["ft_of_time"] as? NSString {
    let ft_of_time = Utils.convert_string(string: rawFt_of_time.substring(to: 5) as NSString)
    //Use ft_of_time here...
}

请勿使用as AnyObject使编译器静音...

答案 1 :(得分:1)

错误原因是Swift 3 AnyObject?无法直接投射到基金会NSString

你可以写

let ft_of_time = ((anyObj["ft_of_time"] as! String as NSString).substring(to: 5) as NSString)

但我建议用

替换整行
let ftOfTime = anyObj["ft_of_time"] as! String
let ft_of_time = ftOfTime.substring(to:ftOfTime.index(ftOfTime.startIndex, offsetBy: 5)) as NSString

它也是如此,但它使用原生的Swift API。除了最终演员NSString(如果需要的话),没有来回的类型。

答案 2 :(得分:0)

您可以将String转换为NSString,如

let swiftString:String = "Swift style string"
let objCString:NSString = NSString(string:swiftString)

首先将您的string投放到nsstring,然后使用methods nsstring

答案 3 :(得分:0)

这个问题(无法将类型'_SwiftValue'的值强制转换为'NSString')也可以像这样解决:

    let price = "\(String(describing: single_product_dict.value(forKey: "total_price_format") ?? ""))"
    cell.lblPrice.text = price