Ula*_*Ula 2 arrays items insert-update ios swift
有货币汇率的数组,并且在inputTextField中输入了金额之后,我想更新此货币上的该数组中的所有项目,并将该货币放在tableView中,尝试使用循环来执行此操作,但这不能正常工作,因为这是解决方案刚刚放在表中的每个循环
inputTextField是文本字段的名称
receivedRates:[Double] = [1.1,1.6,2.0,1.3] // just example of the rates
for i in receivedRates {
let newValue = Double(i)*Double(Int(inputTextField.text!)!)
currentAmount.append(newValue)
receivedRates = currentAmount
}
Run Code Online (Sandbox Code Playgroud)
如何不循环地更新此数组,或者可能对此循环有其他解决方案?
您想使用文本字段的double值来覆盖数组中的所有项目。
在Swift中一个非常合适的方法是 map
var receivedRates = [1.1, 1.6, 2.0, 1.3]
receivedRates = receivedRates.map{ $0 * Double(inputTextField.text!)! }
Run Code Online (Sandbox Code Playgroud)
或者,您可以枚举索引并在适当的位置更新值
receivedRates.indices.forEach{ receivedRates[$0] *= Double(inputTextField.text!)! }
Run Code Online (Sandbox Code Playgroud)
我怀疑您是否真的要先将文本转换为Int(丢失小数部分),然后再转换为Double,当然您应该安全地打开可选选项。
您还可以扩展MutableCollection和实现您自己的可变映射方法来转换您的数组:
extension MutableCollection {
mutating func mutableMap(_ transform: (Element) throws -> Element) rethrows {
var index = startIndex
for element in self {
self[index] = try transform(element)
formIndex(after: &index)
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var receivedRates = [1.1, 1.6, 2.0, 1.3]
receivedRates.mutableMap { $0 * 2.5 }
print(receivedRates) // [2.75, 4, 5, 3.25]
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
if let value = Double(inputTextField.text!) {
receivedRates.mutableMap { $0 * value }
}
Run Code Online (Sandbox Code Playgroud)