Swift 如何设置键盘的格式,以便始终使用&引用;点而不是“点”&引用;逗号

Swift 如何设置键盘的格式,以便始终使用&引用;点而不是“点”&引用;逗号,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

我有包含纬度和经度的文本字段,我需要在十进制键盘上始终使用点“.”而不是逗号“,”因为如果用户的iPhone所在区域不是美国或十进制键盘上的乌克兰,我就使用逗号“,”并且我的应用程序正在崩溃。如何实现NumberFormatter始终有点“

Swift文件,用于将表单文本字段文本DMM坐标转换为DM

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您没有在我的答案中使用解决方案。