0

我正在尝试查询我的用户的距离。我可以用这段代码做到这一点

    PFGeoPoint.geoPointForCurrentLocationInBackground { (geoPoint: PFGeoPoint?, error: NSError?) -> Void in

    let query = PFUser.query()

    query?.whereKey("location", nearGeoPoint: geoPoint!, withinKilometers: 1.0)

我想要做的是,当用户设置滑块值时,使用该值而不是 1.0,如上所示。我试图用这段代码做到这一点:这是滑块代码:

var distanceSearch: String?

 @IBAction func kmSliderValueChanged(sender: UISlider) {

    let kmCurrentValue = Int(sender.value)

    kmLabelUpdate.text = "\(kmCurrentValue)km"

    distanceSearch = "\(kmCurrentValue)"
}

然后这是查询行:

query?.whereKey("location", nearGeoPoint: geoPoint!, withinKilometers: distanceSearch!)

它在查询行上返回错误:

无法将 String 类型的值转换为预期的参数类型 Double

所以我需要将滑块 kmCurrentValue 转换为 double 但我不明白如何通过阅读其他 SO 问题来做到这一点。一般来说,我对编码还是很陌生。有人能告诉我我需要做什么吗?

所以将字符串转换为双精度

4

4 回答 4

0

Swift 的Double类有一个带有字符串参数的构造函数,所以你可以Double(distanceSearch!)按照@luk2302 在评论中建议的那样做。

但是,此结果返回一个 Swift 可选项,因此您应该这样做Double(distanceSearch!)!以解开 Double 构造函数返回的可选项。查看有关该 Double 构造函数的 Apple 文档

于 2015-11-24T17:27:08.250 回答
0

只需使用初始化程序将其转换distanceSearch为 a :Double

query?.whereKey("location", nearGeoPoint: geoPoint!, withinKilometers: Double(distanceSearch!)!)
于 2015-11-24T17:27:08.377 回答
0

所有这些间接都没有理由。滑块本身给你一个双倍。您无需将其转换为字符串,然后再转换回双精度。只需使用value滑块本身的。

于 2015-11-24T17:31:13.287 回答
0

有很多方法可以转换StringDouble. 您可以使用默认初始化程序:

Double("23.0")

或转换为NSString使用doubleValue方法。

("23.0" as NSString).doubleValue

当你处理一个可选项时,还有一件额外的事情要做。

let str: String? = ...

然后你可以尝试强行打开它:

Double(str!)

但是当你的字符串在nil. 更安全的方法是:

Double(str ?? "0")

这个默认为零。

于 2015-11-24T17:29:05.600 回答