有什么方法可以优化这种特殊的套管封闭物?

时间:2017-07-27 23:33:10

标签: swift closures

我想在数组上使用sorted方法。

public func sorted(by areInIncreasingOrder: (Self.Iterator.Element, Self.Iterator.Element) -> Bool) -> [Self.Iterator.Element]

我可以看到它需要一个函数(它需要2个元素并返回一个Bool),然后返回一个元素数组(已排序)

我遇到困难的方法是尝试传递一个匿名函数(闭包),使用$0$1作为参数

我想为特定的key (“模块”)

添加特殊情况

然后我想访问$0$1

上的媒体资源

但是,表面上,这意味着我必须转换这些参数,以便我可以访问这些参数的属性

更糟糕的是,因为参数可能是StringNode,我目前有重复的代码(switch语句)

所以,无论如何,你们中的任何一位Swift老兵都会看到我能做些什么才能让它变得更好?

return self.sorted(by: {
            for 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
        })
}

0 个答案:

没有答案