freak4pc / SwiftHeroes2024Macros

Code samples from my talk on Swift Macros from Swift Heroes 2024

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Swift Heroes 2024 Macros

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

About

Code samples from my talk on Swift Macros from Swift Heroes 2024


Languages

Language:Swift 100.0%