我试图用我从服务器获取的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).
出了什么问题?
答案 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