Swift报错:无法将类型'Any?'转换为预期参数类型'String'
问题解决方法
你的错误源于Swift不允许直接将String与Optional<String>(或未明确类型的Any?)用+运算符拼接,即便你用as!强制转换,也需要明确转换后的类型是确定的String才能参与拼接。
修正后的代码方案:
给强制转换部分加上括号,明确优先级,确保json["srvFile0"]先被强制转换为String,再参与字符串拼接:
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { if let nickn = json["nickname"] as? String { if nickname != nickn { nickname = nickn } } var serverScalingString = "" // 给强制转换部分加括号,明确类型转换优先级 serverScalingString += "0," + (json["srvFile0"] as! String) + "|" serverScaling = serverScalingString }
更清晰的写法(推荐):
先将json["srvFile0"]强制转换为String并赋值给变量,再进行拼接,可读性更强:
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { if let nickn = json["nickname"] as? String { if nickname != nickn { nickname = nickn } } var serverScalingString = "" let srvFile0Value = json["srvFile0"] as! String serverScalingString += "0," + srvFile0Value + "|" serverScaling = serverScalingString }
注意:按照你的要求,以上代码在json["srvFile0"]不存在或不是String类型时会直接崩溃,符合你不需要空安全处理的需求。
内容的提问来源于stack exchange,提问作者user19591083
相关产品推荐
相关产品推荐

