在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。相关的知识,希望对你有一定的参考价值。
如何将具有字符串类型值的 "numbersString "数组转换为具有浮动类型值的 "numbersFloat "数组?
问题是,我一直收到 "无法将类型'String'的值分配给类型'Double'的下标 "的错误信息。
我明白,我不能把Float值输入到String下标中,但我既不能改变String,因为它们是逗号隔开的,也不能把值放在数组中。
var numbersString = [["564,00", "577,00", "13,00"], ["563,00", "577,00", "14,00"]] → I have
var numbersFloat = [[564.00, 577.00, 13.00], [563.00, 577.00, 14.00]] → I need
我尝试过的事情。
for row in 0...numbersString.count-1
for col in 0...numbersString[0].count-1
numbersFloat[row][col] = numbersString[row][col]
Error: Cannot assign value of type 'String' to subscript of type 'Double'
for row in 0...numbersString.count-1
for col in 0...numbersString[0].count-1
var a = table[row][col]
table[row][col] = Float(a)
你可以使用 NumberFormatter
来处理包含使用逗号作为十进制分隔符的浮点数的字符串。我通常会将自定义格式化器封装在一个类中。它看起来像这样。
class FloatFormatter
let formatter: NumberFormatter
init()
formatter = NumberFormatter()
formatter.decimalSeparator = ","
func float(from string: String) -> Float?
formatter.number(from: string)?.floatValue
把这个代入到你的示例代码中(修正了你的浮点数组的类型),你会得到。
var numbersString = [["564,00", "577,00", "13,00"], ["563,00", "577,00", "14,00"]]
var numbersFloat: [[Float]] = [[564.00, 577.00, 13.00], [563.00, 577.00, 14.00]]
let floatFormatter = FloatFormatter()
for row in 0...numbersString.count-1
for col in 0...numbersString[0].count-1
numbersFloat[row][col] = floatFormatter.float(from: numbersString[row][col])!
这能用,但不是很Swifty。使用map会更好(这样你就不需要担心匹配数组的大小和预分配浮动数组)。
let floatFormatter = FloatFormatter()
let numbersString = [["564,00", "577,00", "13,00"], ["563,00", "577,00", "14,00"]]
let numbersFloat = numbersString.map (row: [String]) -> [Float] in
return row.map stringValue in
guard let floatValue = floatFormatter.float(from: stringValue) else
fatalError("Failed to convert \(stringValue) to float.")
return floatValue
也许你想要这样的东西?
var numbersString = [["564.00", "577.00", "13.00"], ["563.00", "577.00", "14.00"]]
var numbersFloat: [[Float]] = Array(repeating: Array(repeating: 0.0, count: numbersString[0].count), count: numbersString.count)
print(numbersFloat.count)
for row in 0...numbersString.count - 1
for col in 0...numbersString[0].count - 1
print(row, col, numbersString[row][col])
print(Float(numbersString[row][col]) ?? 0)
numbersFloat[row][col] = Float(numbersString[row][col]) ?? 0
这将与". "和", "分隔符一起工作。
var numbersString = [["564,00", "577,00", "13,00"], ["563,00", "577,00", "14,00"]]
let numberFormatter = NumberFormatter()
let decimalSeparator = ","
numberFormatter.decimalSeparator = decimalSeparator
let numbersFloat = numbersString.map( $0.compactMap( numberFormatter.number(from: $0.replacingOccurrences(of: ".", with: decimalSeparator))?.floatValue ))
给大家介绍一下。NumberFormatter有 .locale
属性,并且在创建formatter时,locale被设置为当前设备的locale。但不同国家的小数点分隔符不同。这可能会导致非常不愉快的错误,当一切对你甚至对QA来说都是好的,但对生产中的用户来说却不工作。因此,最好的办法是通过上述方式控制字符串到双数的转换。
以上是关于在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。的主要内容,如果未能解决你的问题,请参考以下文章
在for循环中将PFFile数组转换为UIImage返回空数组Swift