2017-06-04 102 views
0

我試圖定義一個基於段控制器開關的謂詞。If else語句來定義一個NSPredicate

if self.streamtype == "case1" { 
    let predicatearray = defaults.object(forKey: "case1") as! [String] 
    let predicate = NSPredicate(format: "UserID IN %@" , predicatearray) 
} else if self.streamtype == "case2" { 
    let predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil) 
} else { 
    let predicatearray = defaults.object(forKey: "case3") as! [String] 
    let predicate = NSPredicate(format: "UserID IN %@", predicatearray) 
} 

let publicData = CKContainer.default().publicCloudDatabase 
let query = CKQuery(recordType: "Post", predicate: predicate) 

我收到一個錯誤說:

「不能被髮送到類NSPredicate的抽象對象:創建一個具體的實例」

另外,它告訴我謂詞變量的初始化從未被使用過。我試過用幾種不同的方式編寫函數,但是這對我來說最合適,因爲我只需要在加載新信息時更新謂詞,所以我只將這兩個函數合併爲一個。

回答

2

您正在定義if {}else {}範圍內的謂詞,這就是爲什麼它在範圍之外不可見。

var predicate : NSPredicate! 
if self.streamtype == "case1" { 
    let predicatearray = defaults.object(forKey: "case1") as! [String] 
    predicate = NSPredicate(format: "UserID IN %@", predicatearray) 
} else if self.streamtype == "case2" { 
    predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil) 
} else { 
    let predicatearray = defaults.object(forKey: "case3") as! [String] 
    predicate = NSPredicate(format: "UserID IN %@", predicatearray) 
} 

let publicData = CKContainer.default().publicCloudDatabase 
let query = CKQuery(recordType: "Post", predicate: predicate)