2016-11-21 18 views
1

我遇到問題。我正在做一個具有登錄功能的應用程序,並希望檢查是否存在具有指定用戶名的用戶。所以我做了:使用swift檢查CloudKit中指定值的記錄的存在性

func doesRecordExist(inRecordType: String, withField: String, equalTo: String) -> Bool { 
    print(withField,equalTo) 
    var result = false 

    let predicate = NSPredicate(format: "\(withField) == %@", equalTo) 
    let query = CKQuery(recordType: inRecordType, predicate: predicate) 
    publicDatabase.perform(query, inZoneWith: nil, completionHandler: {results, er in 

     if results != nil { 
      print(results!.count) 
      if results?.count == 1 { 
       print(results!.count) 
       result = true 
      } 
     } 
    }) 
    return result 
} 

其中在withField「用戶名」將被輸入並在equalTo值將被輸入,這是用戶名。

我做錯了什麼? 謝謝。

編輯
好吧,我終於想出瞭如何做rmaddy建議和它的工作。非常感謝你!

回答

0

如果該函數的結果取決於異步操作的結果,則不能從函數返回值。正如所寫的,函數末尾的return result行(值爲false)將在甚至開始數據庫查詢之前調用很久。

您的doesRecordExist函數需要使用完成處理函數參數,該函數的功能與perform函數相差很多。

當然,你需要重構你的代碼,調用你的doesRecordExist來處理你不會立即得到結果的事實。

+0

我沒有創建完成處理程序的經驗,但是,我只能處理它們,所以我應該怎麼做? –