具体来说,我想知道.mergeByPropertyObjectTrumpMergePolicyType和的定义是否.mergeByPropertyStoreTrumpMergePolicyType交换。
来自Apple(强调我的):
mergeByPropertyObjectTrumpMergePolicyType:合并冲突的策略...通过单个属性,外部更改胜过内存更改。
我的实验:
在一个新的 iOS 项目中:
main和background. 每个上下文的合并策略设置为.mergeByPropertyObjectTrumpMergePolicyType(与上面的描述相同)。Document实体W / Aname型的属性String/ NSString。documentA的Document。main上下文中,我获取documentA并将其设置name为“main_document”。我不保存。background上下文中,我获取documentA并将其设置name为“background_document”。background上下文。documentA.name正如预期的那样,数据库的版本(使用外部 sqlite 客户端获取)现在是“background_document”。main上下文。这是我遇到意外行为的地方,至少根据我对文档的阅读 - 数据库的版本documentA.name现在是“main_document”。
如果外部更改应该胜过内存更改,那么数据库的值不应该仍然设置为“background_document”吗?
编辑:如果我将每个上下文的合并策略切换到.mergeByPropertyStoreTrumpMergePolicyType,我会从.mergeByPropertyObjectTrumpMergePolicyType的描述中得到我期望的行为- 保存main上下文会丢弃 …
我有一个Result带有相关值的枚举:
enum Result {
case success(object: AnyObject)
case failure(errorMessage: String)
case reauthenticate(errorMessage: String)
}
Run Code Online (Sandbox Code Playgroud)
我想以相同的方式处理failure和reauthenticate案例,但也需要访问相关的值.Swift中是否有语言功能让我在failure不丢失errorMessage 的情况下完成这个案例?就像是:
switch result {
case .success(_):
// ...
case .failure(let errorMessage): fallthrough
case .reauthenticate(let errorMessage:
print(errorMessage)
}
Run Code Online (Sandbox Code Playgroud)
我知道还有其他方法可以解决这个问题.例如,我可以添加一个计算errorMessagevar Result.我的问题是它是否可以在switch语句中完成(使用fallthrough或其他方法).