【发布时间】:2019-10-31 01:33:03
【问题描述】:
我有一个核心数据框架来处理你可以用coredata 做的所有事情,使其与可编码协议更加配合。我唯一剩下的就是更新数据。我通过将模型作为参数发送到它们的函数中来存储和获取数据。因此,如果我希望只更新我请求的模型中的 1 个特定值,我需要模型中的变量名称。
public func updateObject(entityKey: Entities, primKey: String, newInformation: [String: Any]) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityKey.rawValue)
do {
request.predicate = NSPredicate.init(format: "\(entityKey.getPrimaryKey())==%@", primKey)
let fetchedResult = try delegate.context.fetch(request)
print(fetchedResult)
guard let results = fetchedResult as? [NSManagedObject],
results.count > 0 else {
return
}
let key = newInformation.keys.first!
results[0].setValue(newInformation[key],
forKey: key)
try delegate.context.save()
} catch let error {
print(error.localizedDescription)
}
}
如您所见,newInformation 参数包含应更新的值的键和新值。但是,我不想通过("first": "newValue") 我想通过spots.first : "newValue"
如果我有这样的结构:
struct spots {
let first: String
let second: Int
}
我如何只得到 1 个名字?
我试过了:
extension Int {
var name: String {
return String.init(describing: self)
let mirror = Mirror.init(reflecting: self)
return mirror.children.first!.label!
}
}
我希望能够说类似的话:
spots.first.name
但不知道怎么做
【问题讨论】:
-
不理解问题陈述。请澄清。
-
get 1 name from this是什么意思? -
你的愿望可能是错误的。 :) 任何时候你发现自己想要像这样自省,你就是在做一些不敏捷的事情。你应该向我们解释真正的问题是什么,这让你认为你需要这样做。
-
通过使用镜像,我可以遍历孩子并打印
children.label来获取名称,但我想要 1 个特定名称 -
好的,接下来会有更深入的解释给我一秒钟