【发布时间】:2021-03-27 17:17:21
【问题描述】:
我有一个数据集:
struct MyData {
var name: String
var date: Date
var quantity: Int
var inStock: Bool
}
然后在数组中使用它
let myArray: [MyData] = [...]
我目前正在编写更改值的方法..
func changeName(to newName: String) { myArray[0].name = newName }
func changeDate(to newDate: Date) { myArray[0].date = newDate }
func changeQuantity(to newQuantity: Int) { myArray[0].quantity = newQuantity}
我开始认为这对于泛型来说是一个完美的案例,并说类似
func changeValue<Value>(to newValue: Value) { ... }
唯一的问题是我不能使 点符号 通用
如果我能说
myArray[0].value = newValue
任何关于此事的指导都会有所帮助!
【问题讨论】:
-
我没有时间写答案,但请查找“关键路径”。
-
你为什么需要这个?
myArray.change(value: \.name, to: "new name")比myArray[0].name = "new name"有什么优势? -
如果有两个相同类型的属性怎么办?
-
@SergioBost 我看不到编写方法来更改元素属性的任何优势。顺便说一句,您需要首先将它们声明为变量而不是常量。如果你真的想使用关键路径,你只需要
myArray[0][keyPath: \.name] = "whatever",但 IMO 更容易按照 Martin R 建议的myArray[0].name = "whatever" -
@SergioBost 这很明显。我的意思是不通过密钥路径