[SOLVED] Static Member Cannot Be Used on Protocol Metatype Swift

Issue

I’m trying to create a closure for a protocol type I have, but I’m getting the following error

Static member ‘menuItemSorter’ cannot be used on protocol metatype ‘MenuItem.Protocol’

Here’s a reduced version of my code that I’m trying to run in a playground.

protocol MenuItem {
    var order: Int {get}
}

extension MenuItem {
    static var menuItemSorter: (MenuItem, MenuItem) -> Bool {
        return { $0.order < $1.order }
    }
}

class BigItem : MenuItem {
    var order: Int = 1
}

let bigItems = [BigItem(), BigItem()]

let sorter = MenuItem.menuItemSorter

I’d like to be able to have a class/static var method on MenuItem that can sort menuItems, what’s the best way to do this?

Solution

Protocols don’t have an accessible interface from the rest of your code.

You need to call it from an adhering type:

class BigItem: MenuItem {
    var order: Int = 1
}

let sorter = BigItem.menuItemSorter

Answered By – GetSwifty

Answer Checked By – Candace Johnson (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published.