2016-11-12 26 views
1

我最近将项目升级到了Swift 3,并且遇到了字符串插值错误。Swift 3中的字符串插值段错误

我的代码:

let coordString = "\(locationCoordinate.latitude) \(locationCoordinate.longitude)".stringByReplacingOccurrencesOfString(".", withString: ",") 

错误说:

'的init(stringInterpolationSegment :)' 静态成员不能在类的实例使用 '字符串'

如何我可以解决这个错误吗?

+0

基本上使用'(NS)Numberformatter'根据当前区域显示一个数的小数分隔符。进一步'stringByReplacingOccurrencesOfString'已在Swift 3中重命名。 – vadian

+0

我是swift的新手,你可以在代码中写下它。谢谢 –

回答

0

该方法已更名为斯威夫特3:

let coordString = "\(locationCoordinate.latitude) \(locationCoordinate.longitude)".replacingOccurrences(of: ".", with: ",")  
1

更换使用replacingOccurrences(of...小数点分隔符是不好的编程习惯。

你应该总是使用NumberFormatter能够考虑用户的当前语言环境。

这是一个例子。小数点分隔符显示取决于当前的语言环境。如果您确实需要显式逗号,请取消对locale行的注释并将语言环境标识符设置为您的首选。

let latitude = 52.5 
let longitude = 13.0 
let formatter = NumberFormatter() 
formatter.numberStyle = .decimal 
// formatter.locale = Locale(identifier: "DE_de") 

let coordString = formatter.string(from: NSNumber(value:latitude))! + " " + formatter.string(from: NSNumber(value:longitude))! 
+0

能否请你解释一下为什么这是更好的做法 –

+0

对于某些语言(locales),“。”应以十进制格式(例如美国英语)使用,但在其他格式中应使用“,”(例如许多欧洲语言)。所以只需替换“。”用“,”不是一个好主意,因为它没有考虑本地化。最好让格式化程序决定(根据您设置的区域设置)是否使用“。”。或“,”......我认为这就是@vadian正在做的事情。 –