Swift 如何设置键盘的格式,以便始终使用&引用;点而不是“点”&引用;逗号
我有包含纬度和经度的文本字段,我需要在十进制键盘上始终使用点“.”而不是逗号“,”因为如果用户的iPhone所在区域不是美国或十进制键盘上的乌克兰,我就使用逗号“,”并且我的应用程序正在崩溃。如何实现NumberFormatter始终有点“ Swift文件,用于将表单文本字段文本DMM坐标转换为DMSwift 如何设置键盘的格式,以便始终使用&引用;点而不是“点”&引用;逗号,swift,keyboard,textfield,comma,Swift,Keyboard,Textfield,Comma,我有包含纬度和经度的文本字段,我需要在十进制键盘上始终使用点“.”而不是逗号“,”因为如果用户的iPhone所在区域不是美国或十进制键盘上的乌克兰,我就使用逗号“,”并且我的应用程序正在崩溃。如何实现NumberFormatter始终有点“ Swift文件,用于将表单文本字段文本DMM坐标转换为DM import Foundation import MapKit func DMMtoDD(latDeg: Double, latMin: Double, latDir: String?, long
import Foundation
import MapKit
func DMMtoDD(latDeg: Double, latMin: Double, latDir: String?, longDeg: Double, longMin: Double, longDir: String?) -> CLLocationCoordinate2D {
var latitude = CLLocationDegrees()
if latDeg > 0 {
latitude = CLLocationDegrees(latDeg + ((latMin*60)/3600))
if latDir == "S" {latitude *= -1}
}
else{
latitude = CLLocationDegrees((latDeg * -1) + ((latMin*60)/3600))
latitude *= -1
}
var longitude = CLLocationDegrees()
if longDeg > 0 {
longitude = CLLocationDegrees(longDeg + ((longMin*60)/3600))
if longDir == "W" {longitude *= -1}
}
else{
longitude = CLLocationDegrees((longDeg * -1) + ((longMin*60)/3600))
longitude *= -1
}
return CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
}
视图控制器
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let resultsVC = segue.destination as! ResultsViewController
let coord = DMMtoDD(latDeg: Double(latDegTextField.text!)!, latMin: Double(latMinutesTextField.text!)!, latDir: String(latPTextField.text!), longDeg: Double(longDegTextField.text!)!, longMin: Double(longMinutesTextField.text!)!, longDir: String(longPTextField.text!))
}
//如何在代码中使用坐标
let G16 = (tghaSun + coord.longitude).truncatingRemainder(dividingBy: 360.0)
我猜您正在分析用户输入的内容,如下所示:
let longitude = CLLocationDegrees(whatTheUserEntered)
如果用户键盘的区域设置设置为使用,
作为十进制分隔符,则whattheserented
将包含类似1,23
的内容,并且上行将无法正确解析数字。我理解对了吗
不要试图更改键盘以显示
,而是根据用户的区域设置更改解析数字的方式以允许使用,
使用NumberFormatter
:
let numberFormatter = NumberFormatter()
// numberFormatter takes the current locale into consideration by default
let longitude = numberFormatter.number(from: whatTheUserEntered).map { CLLocationDegrees($0) }
您可以将numberFormatter.locale
设置为locale(标识符:“uk”)
(或另一个使用,
作为小数分隔符的区域设置),以测试此设置是否有效:
numberFormatter.locale = Locale(identifier: "uk")
到目前为止,您尝试了什么?结果如何?正确的解决方案是使用一个,is-many区域设置正确处理用户输入的号码。显示导致崩溃的代码,以便我们可以帮助您正确修复。仅供参考-数字格式化程序的区域设置默认为当前区域设置。无需显式设置。还要注意,
numberformatternumber(from:)
返回一个可选值。@rmaddy不知道!修正了。@VladislavYarmak您没有在我的答案中使用解决方案。