2015-12-08 60 views
1

我有這個結構定義在自己的文件,並希望在別處和測試中使用它。如何使此OptionSetType結構公開?

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

當我嘗試使用它時,我得到一個關於如何由於該類型使用內部類型而無法聲明屬性的錯誤。

public var userPermissions = UserPermissions() 

所以我想我可以公開它,但是這給了我一個關於需要公共init函數的錯誤。

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

所以我想補充這該結構的定義,它導致編譯器將崩潰:

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

一些訪問控制的東西我還在周圍包裹我的頭斯威夫特。我究竟做錯了什麼?我怎樣才能使用這個OptionSetType?

回答

2

如果您訪問了OptionSetType protocol reference頁面,您會找到您需要的示例。你的UserPermissions是一個結構體,沒有super被調用。

現在回答你的問題:

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]