对于 @NSManaged 变量,fileprivate 是不是足够?

Posted

技术标签:

【中文标题】对于 @NSManaged 变量,fileprivate 是不是足够?【英文标题】:Is fileprivate adequate for @NSManaged variables?对于 @NSManaged 变量,fileprivate 是否足够? 【发布时间】:2017-06-04 23:19:31 【问题描述】:

Xcode 可以从 Core Data 实体生成它:

//  This file was automatically generated and should not be edited.

import Foundation
import CoreData

extension Media 
    @NSManaged public var imageString: String?

我的同事对其进行了编辑以隐藏字符串并仅公开一个 URL:

extension Media 
    @NSManaged fileprivate var imageString: String?
    public var image: URL? 
        return imageString != nil ? URL(string: imageString!) : nil
    

在这种情况下可以使用fileprivate(或private)吗?这是在 Core Data 中存储 URL 的最佳做法吗?

【问题讨论】:

【参考方案1】:

这行得通。这是否是一个好主意取决于您需要如何使用 URL。

您可以直接保存 URL,无需字符串属性。只需在 Core Data 模型编辑器中将属性设置为“可转换”类型即可。由于 URL 类型符合NSCoding,Core Data 会自动将其转换为NSData。您可以为该属性分配一个 URL,然后再读回 URL。

这很好除非您需要根据 URL 获取对象。您不能在 fetch 谓词中使用可转换的属性,因此使用可转换的属性,例如,您不能使用包含 ***.com 的 URL 获取每个对象。如果你需要做这样的事情,你的方法是一个很好的方法。如果没有,transformable 属性更简单。

【讨论】:

以上是关于对于 @NSManaged 变量,fileprivate 是不是足够?的主要内容,如果未能解决你的问题,请参考以下文章

如何将@NSManaged 对象类中的变量初始化为 JSON 值?

在 NSManagedObject 类中初始化 @NSManaged 变量?

Swift 3必看:新的访问控制fileprivate和open

Swift的访问控制讲解

@NSManaged 有啥作用?

存储的属性需要一个初始值或者应该是@NSManaged