2017-01-20 1 views
0

Xcode peut générer ce à partir d'une entité de données de base:Est-ce que fileprivate est adéquat pour les variables @NSManaged?

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

import Foundation 
import CoreData 

extension Media { 
    @NSManaged public var imageString: String? 
} 

Mon collègue a édité pour cacher la chaîne et n'exposer une URL:

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

est-fileprivate (ou private) OK pour utiliser dans ce cas? Est-ce la meilleure pratique pour stocker une URL dans les données de base?

Répondre

2

Cela fonctionne. Que ce soit une bonne idée dépend de la façon dont vous devez utiliser l'URL.

Vous pouvez simplement enregistrer l'URL directement sans avoir de propriété de chaîne. Faites simplement de la propriété un type "transformable" dans l'éditeur de modèle Core Data. Puisque le type d'URL est conforme à NSCoding, les données de base le convertiront automatiquement en/à partir d'un NSData. Vous devez attribuer une URL à la propriété et lire les URL ultérieurement.

C'est bon sauf si vous avez besoin d'extraire des objets en fonction de l'URL. Vous ne pouvez pas utiliser d'attributs transformables dans les prédicats d'extraction. Par conséquent, avec un attribut transformable, vous ne pouvez pas, par exemple, extraire tous les objets avec une URL contenant stackoverflow.com. Si vous avez besoin de faire quelque chose comme ça, votre approche est bonne. Sinon, l'attribut transformable est plus simple.