我有一个Site
类,其中包含Valve
个对象的字典。 E.g。
class Site {
var valves:[String:Valve] = [:]
...
}
我的Valve
类有一个名为uiCompare()
的自定义排序函数。我想向Site
添加一个函数,将函数作为排序数组返回。在编译器唠叨之后......我想出了
class Site {
...
func sortedValves() -> [Valve] {
return self.valves.allValues().sorted { $0.uiCompare($1) }
}
}
但是这给了我以下错误:
[String:Valve] does not have a member named 'allValues'
所以我很困惑。那不是NSDictionary
吗?我正在从以下objc
代码中移植此代码:
- (NSMutableArray*) sortedValves {
NSMutableArray *sorted = [NSMutableArray arrayWithArray: self.valves.allValues];
[sorted sortUsingSelector: @selector(uiCompare:)];
return sorted;
}
答案 0 :(得分:2)
Dictionary
和可可的NSDictionary
是可以桥接的,但不是一回事。将Dictionary
转换为NSDictionary
会产生性能成本。此外,虽然任何NSDictionary
都可以转换为Dictionary
,但并非所有Dictionary
个对象都可以转换为NSDictionary
个对象。可以理解的是,他们的界面有些不同。
我经常对sort
/ sorted
方法,map
方法或filter
方法感到困惑。现在我只是使用免费功能,为了保持一致性,这些功能似乎全面工作。
sorted(valves.values) { $0.uiCompare($1) }
这将返回一个数组。
答案 1 :(得分:1)
如果您想获得所有字典值的无序可迭代集合,请使用Dictionary
方法的values
使用values属性
初始化一个新数组尝试return Array(valves.values).sorted { $0.uiCompare($1) }
for swift
答案 2 :(得分:1)
var valves:[String:Valve] = [:]
所以我很困惑。那还不是NSDictionary吗?我
没有。这是一个Swift词典,它与NSDictionary本质上是不同的。 要保持NSDictionary功能/方法的使用
var valves = NSDictionary() //or initialised with keys and values or optional or NSMutableDictionary or whatever you need
或将Dictionary转换为NSDictionary