2015-03-21 3 views
0

Есть ли способ использовать несколько функций «содержит (массив, значение)» в инструкции if? У меня есть запрос, который хранится в результатах в массиве. Если результаты равны нулю, я выполняю набор операций. Если, однако, массив не ноль, я хотел бы проверить, если некоторые объекты появляются в нем:Использовать несколько функций в выражении if (Swift)

var user: PFUser? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //get the two players 
     if let user = user{ 

      var userQuery = PFQuery(className: "Game") 
      userQuery.whereKey("user1", equalTo: user) 
      userQuery.whereKey("isActive", equalTo: true) 

      var userQuery2 = PFQuery(className: "Game") 
      userQuery2.whereKey("user2", equalTo: user) 
      userQuery2.whereKey("isActive", equalTo: true) 

      var currentUserQuery = PFQuery(className: "Game") 
      currentUserQuery.whereKey("user1", equalTo: PFUser.currentUser()) 
      currentUserQuery.whereKey("isActive", equalTo: true) 

      var currentUserQuery2 = PFQuery(className: "Game") 
      currentUserQuery2.whereKey("user2", equalTo: PFUser.currentUser()) 
      currentUserQuery2.whereKey("isActive", equalTo: true) 

      var query = PFQuery.orQueryWithSubqueries([userQuery, userQuery2, currentUserQuery, currentUserQuery2]) 
      query.findObjectsInBackgroundWithBlock{ 
      (results: [AnyObject]!, error: NSError!) -> Void in 

       if error == nil{ 

        //if there are no active games, start new game 
        if results == nil{ 

         //start game code 


        } else if contains(results, user) as [AnyObject]! && contains(results, PFUser.currentUser()) as [AnyObject]! { 

         println(results) 
        } 

        } 
       } 

      } 
     } 

Использование & & оператор возвращает ошибку на линии: Cannot invoke '&&' with an argument of type '([AnyObject]!,[AnyObject]!)'. Любые идеи о том, как я могу проверить, обнаружены ли объекты и объекты PFUser.current_user() в массиве?

Спасибо!

ответ

1

Проблема в том, что вы пытаетесь выполнить результат содержит func call, который является Bool in, в массив AnyObjects's.

Что вам нужно сделать, это просто для сравнения результатов содержит (результаты, пользователь) и содержит (результаты, функции PFUser.currentUser()) функции. Но это не скомпилируется.

Для того, чтобы ваш компилятор рад, что вы должны бросить результаты массив в массив [PFUser]

См код:

if let users = results as? [PFUser] { 
    if contains(users, user) && contains(users, PFUser.currentUser()) { 
     println(users) 
    } 
} 
+0

Спасибо за помощь! Я удалил инструкцию else if и вместо этого поставил в оператор if выше, и я получаю сообщение об ошибке 'Can not invoke '&&' с аргументом типа '($ T4, $ T9)''. Что это значит? – winston

+0

Я думаю, что это может иметь какое-то отношение к типу возврата '(результаты: [AnyObject] !, error: NSError!) -> Void'. Я думаю, что Пустота может вызвать проблему. – winston

+0

См. Обновленный ответ – salabaha

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