swift - What are some ways I can optimize this special cased closure? -
i want use sorted method on array.
public func sorted(by areinincreasingorder: (self.iterator.element, self.iterator.element) -> bool) -> [self.iterator.element]
and can see takes function (which takes 2 elements , returns bool), , returns an array of element (sorted)
where getting stuck, trying pass anonymous function (closure), using $0 , $1 arguments
i want add special case, specific key ("module")
and want access property on $0 , $1
but means, ostensibly, have cast arguments, can access properties on arguments
and make things worse, because arguments either string or node, have repeated code (the switch statement)
so anyways, of swift veterans see things make better?
return self.sorted(by: { descriptor in sortdescriptors { if descriptor.key == "module" { if let firstnode = $0 as? node { if let secondnode = $1 as? node { let firstmodule = firstnode.module?.name ?? "" let secondmodule = secondnode.module?.name ?? "" let newdescriptor = nssortdescriptor(key: nil, ascending: descriptor.ascending, selector: descriptor.selector) switch newdescriptor.compare(firstmodule, to: secondmodule) { case .orderedascending: return true case .ordereddescending: return false case .orderedsame: continue } } } } switch descriptor.compare($0, to: $1) { case .orderedascending: return true case .ordereddescending: return false case .orderedsame: continue } } return false }) }
Comments
Post a Comment