Swift 我可以通过哪些方法优化这种特殊情况下的关闭?
我想对数组使用Swift 我可以通过哪些方法优化这种特殊情况下的关闭?,swift,closures,Swift,Closures,我想对数组使用sorted方法 public func排序(按areInIncreasingOrder:(Self.Iterator.Element,Self.Iterator.Element)->Bool)->[Self.Iterator.Element] 我可以看到它需要一个函数(它需要2个元素并返回一个Bool),然后返回一个元素数组(排序) 我陷入困境的地方是试图传递一个匿名函数(闭包),使用$0和$1作为参数 我想为特定的键添加一个特殊情况(“模块”) 然后我想访问$0和$1 但这意味
sorted
方法
public func排序(按areInIncreasingOrder:(Self.Iterator.Element,Self.Iterator.Element)->Bool)->[Self.Iterator.Element]
我可以看到它需要一个函数(它需要2个元素并返回一个Bool),然后返回一个元素数组(排序)
我陷入困境的地方是试图传递一个匿名函数(闭包),使用$0
和$1
作为参数
我想为特定的键添加一个特殊情况(“模块”)
然后我想访问$0
和$1
但这意味着,表面上,我必须转换这些参数,这样我才能访问这些参数的属性
更糟糕的是,因为参数可能是String
或Node
,所以我现在有重复的代码(switch
语句)
那么不管怎样,你们这些敏捷的老兵有没有看到我可以做些什么来让这一切变得更好
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
})
}
字符串或节点
是否确实要在同一数组中组合异构类型?此外,如果您使用的是Swift的排序(:)
,为什么要使用排序描述符?我继承了这段代码,没有Swift背景,所以我只是随机应变——我在if
检查模块
之外添加了代码,但没有,不会将不同的类型组合到一个数组中——只是数组可能包含所有字符串
或所有节点
,这听起来像是一个包含两个案例的枚举的作业,一个与一个[String]
关联的值,另一个是[Nodes]
字符串或节点
是否确实要在同一数组中组合异构类型?此外,如果您使用的是Swift的排序(:)
,为什么要使用排序描述符?我继承了这段代码,没有Swift背景,所以我只是随机应变——我在if
检查模块
之外添加了代码,但没有,不会将不同的类型组合到一个数组中——只是数组可能包含所有字符串
或所有节点
,这听起来像是一个包含两个案例的枚举的作业,一个与一个[String]
关联的值,另一个是[Nodes]