Firestore Android присоединиться к коллекциям

Меня удивляет, что Swift 2 (начиная с бета-версии 2) не затрагивает этого. Ниже приведен пример обходного подхода:

enum TestAssociatedValue {
  case One(Int)
  case Two(String)
  case Three(AnyObject)

  func associatedValue() -> Any {
    switch self {
    case .One(let value):
      return value
    case .Two(let value):
      return value
    case .Three(let value):
      return value
    }
  }
}

let one = TestAssociatedValue.One(1)
let oneValue = one.associatedValue() // 1
let two = TestAssociatedValue.Two("two")
let twoValue = two.associatedValue() // two

class ThreeClass {
  let someValue = "Hello world!"
}

let three = TestMixed.Three(ThreeClass())
let threeValue = three. associatedValue() as! ThreeClass
print(threeValue.someValue)

Если ваше перечисление смешивает случаи со связанными значениями и без них, вам нужно сделать тип возвращаемого значения необязательным. Вы также можете возвращать литералы для некоторых случаев (которые не имеют связанных значений), имитируя типизированные перечисления с необработанным значением. И вы даже можете вернуть значение enum для несвязанных, не-сырых типов. Например:

enum TestMixed {
  case One(Int)
  case Two(String)
  case Three(AnyObject)
  case Four
  case Five

  func value() -> Any? {
    switch self {
    case .One(let value):
      return value
    case .Two(let value):
      return value
    case .Three(let value):
      return value
    case .Four:
      return 4
    case .Five:
      return TestMixed.Five
    }
  }
}

let one = TestMixed.One(1)
let oneValue = one.value() // 1
let two = TestMixed.Two("two")
let twoValue = two.value() // two

class ThreeClass {
  let someValue = "Hello world!"
}

let three = TestMixed.Three(ThreeClass())
let threeValue = three.value() as! ThreeClass
print(threeValue.someValue)

let four = TestMixed.Four
let fourValue = four.value() // 4

let five = TestMixed.Five
let fiveValue = five.value() as! TestMixed

switch fiveValue {
case TestMixed.Five:
  print("It is")
default:
  print("It's not")
}
// Prints "It is"
0
задан Alex Mamo 13 July 2018 в 13:17
поделиться

1 ответ

Теперь мне нужно получить все группы, членом которых является пользователь.

Для этого я рекомендую вам использовать структуру базы данных, которая выглядит так:

Firestore-root
   |
   --- group_members (collection)
         |
         --- uid (document)
              |
              --- user_groups (map)
                    |
                    --- group_id: true
                    |
                    --- group_id: true

Чтобы запросить эту структуру, используйте следующие строки кода:

Для Android:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
DocumentReference uidRef = rootRef.collection("group_members").document(uid);
uidRef.get().addOnCompleteListener(/* ... */);

Для Kotlin:

val rootRef = FirebaseFirestore.getInstance()
val uidRef = rootRef.collection("group_members").document(uid)
uidRef.get().addOnCompleteListener(/* ... */)

В итоге просто перебираем по карте user_groups и получаем все группы, в которые пользователь входит.

0
ответ дан Alex Mamo 17 August 2018 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: