2016-11-21 3 views
1

У меня проблема. Я делаю приложение с возможностями входа и хотел бы проверить, существует ли пользователь с указанным именем пользователя. Так что я сделал:Проверьте наличие записи с указанным значением в CloudKit с помощью swift

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 suggesteed, и она работала. Большое вам спасибо!

ответ

0

Вы не можете вернуть значение из функции, если результат этой функции зависит от результата асинхронного действия. Как написано, строка return result в конце функции (со значением false) будет вызываться задолго до начала запроса базы данных.

Ваша функция doesRecordExist должна использовать параметр обработчика завершения много строк perform функция делает.

Конечно, вам нужно будет реорганизовать свой код, который вызывает ваш doesRecordExist, чтобы иметь дело с тем, что вы не получите немедленного результата.

+0

У меня нет опыта создания обработчиков завершения, но я могу их обрабатывать, поэтому как мне это сделать? –

Смежные вопросы