在SO和在线上有很多细节。不幸的是,我无法使用我的字符串来处理任何问题。我有这个字符串
https://maps.googleapis.com/maps/api/directions/json?origin=%@,%@&destination=%@,%@&sensor=false&units=metric&mode=driving
我尝试做的就是通过
将必要的值插入到字符串中 let url = String(format: Constants.GoogleDirectionsUrl, road.FromCoordinates.Latitude, road.FromCoordinates.Longitude, road.ToCoordinates.Latitude, road.ToCoordinates.Longitude)
字符串总是打印为
https://maps.googleapis.com/maps/api/directions/json?origin=(null),(null)&destination=(null),(null)&sensor=false&units=metric&mode=driving
虽然所有坐标都有效。当我进行字符串插值时,我得到正确的值来显示
print("coord -- \(road.FromCoordinates.Latitude)")
coord - 29.613929
我在字符串中尝试了%l,%f和%@,但结果相同。任何人都知道我在这里做错了什么?
更新
对于其他任何人来说,这就是我最终要做的就是克服上述情况。我按照下面的答案进行了一些操作,并在应用程序的一个全局类中创建了一个类func。这允许我从任何地方调用它。这是函数
class func createUrlDrivingDiretions (sLat: Double, sLon: Double, eLat: Double, eLon: Double) -> String {
return "https://maps.googleapis.com/maps/api/directions/json?origin=\(sLat),\(sLon)&destination=\(eLat),\(eLon)&sensor=false&units=metric&mode=driving"
}
答案 0 :(得分:3)
为什么不使用以下语法(使用Swift ...而不是遗留的obj-c编码):
let var1 = "xxx"
let var2 = "yyy"
let var3 = "zzz"
let var4 = "www"
let var5 = "kkk"
let s = "https://maps.googleapis.com/maps/api/directions/json?origin=\(var1),\(var2)&destination=\(var4),\(var5)&sensor=false&units=metric&mode=driving"
确保var1 ... var5不是可选的,否则您必须打开它们,否则您将在输出字符串中得到类似的内容:可选(xxx) ...而不是的 XXX 强>
如果您需要特殊格式,请使用NumberFormatter(请参阅:Formatters)