在Swift 3中转换目标C谓词
我必须用Swift转换目标C代码。 这是我的目标C代码在Swift 3中转换目标C谓词,swift,predicate,Swift,Predicate,我必须用Swift转换目标C代码。 这是我的目标C代码 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FacilityId == %@ && Id != %@", facility[kColumnId], [[NSUserDefaults standardUserDefaults] valueForKey:kKeyUserId]]; return [[self coworkers] filteredArr
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FacilityId == %@ && Id != %@", facility[kColumnId], [[NSUserDefaults standardUserDefaults] valueForKey:kKeyUserId]];
return [[self coworkers] filteredArrayUsingPredicate:predicate].count;
我把它改成了斯威夫特。这是我的swift密码
let filteredCoworkers = self.coworkers.filter{
$0["FacilityId"] as? Int == facility[kColumnId] as? Int && $0["Id"] as? String != UserDefaults.standard.string(forKey: kKeyUserId)
}
return filteredCoworkers.count
但它不工作,因为我得到的是空的FilteredWorkers数组。它不应该是空的。这意味着过滤器不工作。请尝试以下代码:
var predicate = NSPredicate(format: "FacilityId == %@ && Id != %@", facility[kColumnId], (UserDefaults.standard.value(forKey: kKeyUserId) as? NSPredicate))
return self.coworkers.filter { predicate.evaluate(with: $0) }.count
请定义“不工作”以便人们知道要寻找什么。定义“不工作”,你面临什么问题,你是否有任何错误?如果是,请在问题中添加该错误我已编辑我的问题。筛选不起作用。不相关,但您应该在此处创建一个模型类型,而不是使用字典(然后将
coworkers
设置为此模型类型的数组)。这将消除字符串键和强制转换,使代码成为强类型而不是字符串类型。