Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift 3中转换目标C谓词_Swift_Predicate - Fatal编程技术网

在Swift 3中转换目标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

我必须用Swift转换目标C代码。 这是我的目标C代码

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
设置为此模型类型的数组)。这将消除字符串键和强制转换,使代码成为强类型而不是字符串类型。