如何用格式创建一个字符串?不工作的字符串

时间:2016-11-18 15:00:23

标签: ios swift

在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"
}

1 个答案:

答案 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