2016-06-01 96 views
0

我有一个静态过滤器可以根据是否选中复选框来打开/关闭NSArrayController。现在我已经绑定的复选框值这样:基于复选框启用NSArrayController谓词

private dynamic var filterPending: NSNumber! { 
    willSet { 
     willChangeValueForKey("filterPredicate") 
    } 
    didSet { 
     didChangeValueForKey("filterPredicate") 
    } 
} 

,然后我绑定的NSArrayController的到这个过滤器:

private dynamic var filterPredicate: NSPredicate? { 
    guard let filter = filterPending?.boolValue where filter == true else { return nil } 
    return NSPredicate(format: "pending > 0") 
} 

这似乎能正常工作,但感觉也许我错过了一些更简单的方法来做到这一点?

+3

在ObjcC这将是'+(NSSet中*) keyPathsForValuesAffectingFilterPredicate {return [NSSet setWithObjects:@“filterPending”,nil]; '',不知道如何迅速转化。 –

+0

我也可以这样做,而不是filterPending。我认为可能有一个更简单的方法,而不是有一个'东西'说谓词需要改变,另一个谓词。基本上有没有一种更干净的方式来做到这一点,而没有在代码中完成这两个元素。 – Gargoyle

回答

0

在您的设置中,值filterPredicate取决于的值filterPending。作为格尔德ķ指出,键 - 值观察 API允许你通过注册filterPendingfilterPredicatedependent key指定该类型的关系:

// MyFile.swift 

class func keyPathsForValuesAffectingFilterPredicate() -> Set<NSObject> { 
    return Set<NSObject>(arrayLiteral: "filterPending") 
} 

private dynamic var filterPending: NSNumber! 

private dynamic var filterPredicate: NSPredicate? { 
    guard let filter = filterPending?.boolValue where filter == true else { return nil } 
    return NSPredicate(format: "pending > 0") 
} 
+0

你不需要返回一个对象,你可以返回Set (“filterPending”) – Gargoyle