我在自己的文件中定义了这个结构,并希望在别处和测试中使用它。
struct UserPermissions : OptionSetType {
let rawValue: UInt
static let CreateFullAccount = UserPermissions(rawValue: 1 << 1)
static let CreateCustomAccount = UserPermissions(rawValue: 1 << 2)
}
当我尝试使用它时,我收到有关如何无法将属性声明为public的错误,因为该类型使用内部类型。
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)
}
所以我将它添加到struct的定义中,这会导致编译器崩溃:
public init(rawValue: Self.RawValue) {
super.init(rawValue)
}
一些访问控制的东西我仍然在Swift中缠头。我究竟做错了什么?我该如何使用这个OptionSetType?
答案 0 :(得分: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]