我的旧的Objective-C函数是
+ (NSUInteger)getNumberOfDistinctUsers:(NSArray *)users {
NSArray* usersAfterPredicate = [users valueForKeyPath:@"@distinctUnionOfObjects.userName"];
return [usersAfterPredicate count]; }
我该如何在Swift中进行转换?我试着做了这样的尝试,但它会崩溃。提示为“无法将类型为 'Swift.Array' 的值强制转换为 'Swift.AnyObject'”。
static func getNumberOfDistinctUsers(users: [ICEPKReferenceDataUser]) -> Int {
var retval : Int = 0
if let usersAfterPredicate = (users as! AnyObject).valueForKeyPath("@distinctUnionOfObjects.userName") {
retval = usersAfterPredicate.count
}
return retval
}
我能用 filter、map 或 Reduce 解决这个问题吗?我只是想通过 username 属性在 users 数组中找出不同的用户。
编辑* 暴力解法。
static func getNumberOfDistinctUsers(users: [ICEPKReferenceDataUser]) -> Int {
var retvalSet : Set<String> = []
for user in users {
retvalSet.insert(user.userName)
}
return retvalSet.count
}