Alex Alex -4 years ago 413
Swift Question

Static Member Cannot Be Used on Protocol Metatype Swift

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?

Answer Source

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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download