This examples shows how you can create a @Cased
macro which, when attached like this:
@Cased
enum Membership {
case nonMember
case user(User, Team)
case team(Team)
case company(Company)
}
Will generate boolean is{case}
property for all cases and {case}: Type?
property when associated values are available:
enum Membership {
case nonMember
case user(User, Team)
case team(Team)
case company(Company)
var isNonMember: Bool {
if case .nonMember = self {
return true
}
return false
}
var isUser: Bool {
if case .user = self {
return true
}
return false
}
var user: (User, Team)? {
guard case let .user(e0, e1) = self else {
return nil
}
return (e0, e1)
}
var isTeam: Bool {
if case .team = self {
return true
}
return false
}
var team: Team? {
guard case let .team(element) = self else {
return nil
}
return element
}
var isCompany: Bool {
if case .company = self {
return true
}
return false
}
var company: Company? {
guard case let .company(element) = self else {
return nil
}
return element
}
}