【发布时间】:2018-01-26 10:48:03
【问题描述】:
我有一个UITextField:它的文本是一个经度(双精度)值。我的设备用一个点打印这个双精度,例如24.000000(而不是24,00000)。
也就是说,文本字段不应该接受无效值:为此,我使用 decimalPad 键盘,其中包含数字和十进制符号(在我的情况下,符号是 , ,而不是 .看起来这因地区而异)。
当用户编辑文本字段时,双精度值被传递给MapKit 映射,因此在我传递它之前该值必须是有效的。
纬度值的有效性非常明确(value>-90 和value<90),但我不知道如何将字符串转换为有效的双精度值。
首先,就我而言,初始数据来自:
mapView.convert(touchPoint, toCoordinateFrom: mapView)
这个返回带点的坐标并在文本字段中显示该坐标。
第二:如果用户正在编辑文本字段,他可以删除一个点,但他不能再插入它。它的点应该用逗号代替,因为在小数点中我只有一个逗号。
第三:我试过这个扩展:
extension String {
struct NumFormatter {
static let instance = NumberFormatter()
}
var doubleValue: Double? {
return NumFormatter.instance.number(from: self)?.doubleValue
}
}
测试文本字段中的值是否为双精度值。如果我插入一个逗号,它会认为该值是双倍的。如果我插入一个点,则值为 nil。
如何验证我的经度值?
【问题讨论】:
-
试试这个:
if let text = textField.text, let yourDouble = Double(text.replacingOccurrences(of: ",", with: ".")) { print(yourDouble) } -
@AndreaMugnaini :当然可以,但是有没有办法知道哪个小数分隔符将使用键盘?这样我就可以只有逗号或只有点。显示一个点并让用户用逗号替换它很奇怪
-
如果你想有更多的解释,你可以在这里查看:stackoverflow.com/q/30150829/2450755,你可能会喜欢这个答案:stackoverflow.com/a/44595112/2450755
-
@3000 别担心,不客气。
-
CLLocationCoordinate2DIsValid返回一个布尔值,表示指定坐标是否有效。
标签: swift uitextfield double mapkit