2016-06-01 46 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