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?
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
You may consider using this approach as a workaround until Swift provides this feature:
class MenuItemFunctions {
static var sorter: (MenuItem, MenuItem) -> Bool {
return { $0.order < $1.order }
}
}
let sorter = MenuItemFunctions.sorter
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With