删除与SWIFT 3
问题描述:
我试图删除空尾随小数和,而不是使用浮法扩展.droplast()空十进制我要考虑使用droplast()如果结果有任何尾随零:删除与SWIFT 3
if result.contains(".0") {
result.characters.dropLast()
}
if result.contains(".00") {
result.characters.dropLast(2)
}
这似乎并没有工作,我得到警告:
调用的结果 'droplast()' 是未使用
答
使用正则表达式,小数点后的数字并不重要
替代解决方案:
var result = "1.00"
result = result.replacingOccurrences(of: "\\.0+$",
with: "",
options: .regularExpression,
range: result.startIndex..<result.endIndex)
考虑你甚至可以省略range
参数整个字符串:
result = result.replacingOccurrences(of: "\\.0+$",
with: "",
options: .regularExpression)
答
dropLast方法将返回离开关掉落的物品子序列,所以在这种情况下,它不会修改结果变量,那么你就需要创建一个基于dropLast方法调用的结果产生一个新字符串并将其分配给结果变量。
var result: String = "1.00"
var dropCount = getTrailingDecimalCount(from: result)
print(dropCount) // outputs 2
if let dropCount = dropCount {
result = String(result.characters.dropLast(dropCount))
print(result) // outputs 1.
}
func getTrailingDecimalCount(from string: String) -> Int? {
var counter = 0
guard string.characters.contains(".") else {
return nil
}
for char in string.characters.reversed() {
if char == "." {
break
}
counter = counter + 1
}
return counter
}
工作感谢哟ü,但是需要我花一些时间来理解它:D特别是范围位......但是在任何情况下都要谢谢! – Brewski
*范围位*的类型是'Range',可以用半开范围运算符'..
vadian
@Brewski:在Swift 3中,范围:'参数是可选的,你可以简单地省略它。 –