2015-12-08 3 views
1

J'ai cette structure définie dans son propre fichier et je veux l'utiliser ailleurs et dans les tests.Comment rendre publique cette structure OptionSetType?

struct UserPermissions : OptionSetType { 
    let rawValue: UInt 
    static let CreateFullAccount = UserPermissions(rawValue: 1 << 1) 
    static let CreateCustomAccount = UserPermissions(rawValue: 1 << 2) 
} 

Lorsque je tente de l'utiliser, je reçois une erreur sur la façon dont la propriété ne peut être déclarée publique parce que le type utilise un type interne. Donc, j'ai pensé que je pourrais le rendre public, mais cela me donne une erreur à propos de la nécessité d'une fonction d'init publique.

public struct UserPermissions : OptionSetType { 
    public let rawValue: UInt 
    static let CreateFullAccount = UserPermissions(rawValue: 1 << 1) 
    static let CreateCustomAccount = UserPermissions(rawValue: 1 << 2) 
} 

Je l'ajouter à la définition de la struct, ce qui provoque le compilateur de plantage:

public init(rawValue: Self.RawValue) { 
    super.init(rawValue) 
} 

Certains des trucs de contrôle d'accès que je suis enroulant toujours ma tête autour de Swift. Qu'est-ce que je fais mal? Comment puis-je utiliser ce OptionSetType?

Répondre

2

Si vous aviez visité la page OptionSetType protocol reference, vous auriez trouvé un exemple de ce dont vous avez besoin. Votre UserPermissions est une structure, il n'y a pas de super à appeler.

Maintenant, pour répondre à votre question:

public struct UserPermissions : OptionSetType { 
    public let rawValue: UInt 
    public init(rawValue: UInt) { self.rawValue = rawValue } 

    static let CreateFullAccount = UserPermissions(rawValue: 1 << 1) 
    static let CreateCustomAccount = UserPermissions(rawValue: 1 << 2) 
} 

// Usage: 
let permissions: UserPermissions = [.CreateFullAccount, .CreateCustomAccount]