Как я могу сделать эту структуру 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()

Поэтому я подумал, что могу сделать его общедоступным, но это дает мне ошибку о необходимости публичной функции инициализации.

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)
}

Некоторые элементы управления доступом, которые я все еще обдумываю в Swift. Что я делаю не так? Как я могу использовать этот OptionSetType?


person Aaron Bratcher    schedule 08.12.2015    source источник


Ответы (1)


Если бы вы посетили страницу OptionSetType справочника по протоколу, Вы бы нашли пример того, что вам нужно. Ваш 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]
person Code Different    schedule 08.12.2015