用各种结构调用func

时间:2018-11-25 16:09:08

标签: ios swift firebase struct google-cloud-firestore

我想创建一个func,我可以将其与各种struct一起使用。

我有几个struct,我想在我所有的func中使用一个struct

我与Firestore合作,并希望使用此func来访问Firestore。

我的第一个结构:

struct Profile {
    var name = ""
    var surname = ""
    var email = ""

    var dictionary: [String: Any] {
        return [
            "name": name,
            "surname": surname,
            "email": email
        ]
    }
}

extension Profile: DocumentSerializable {
    init?(dictionary: [String: Any], id: String) {
        let name = dictionary["name"] as? String ?? ""
        let surname = dictionary["surname"] as? String ?? ""
        let email = dictionary["email"] as? String ?? ""

        self.init(name: name,
                  surname: surname,
                  email: email)
    }
}

我的第二个结构:

struct FavoriteList {
    var favoriteList: [String]
    var id: String

    var dictionary: [String: Any] {
        return [
            "favoriteList": favoriteList,
            "id": id
        ]
    }
}

extension FavoriteList: DocumentSerializable {
    init?(dictionary: [String : Any], id: String) {
        let favoriteList = dictionary["favorite"] as? [String] ?? [""]
        let id = id

        self.init(favoriteList: favoriteList, id: id)
    }
}

还有我现在用来从Firestore加载数据的func:

func observeQuery() {
    guard let query = query else { return }

    let time = DispatchTime.now() + 0.5 

    listener = query.addSnapshotListener { [unowned self] (snapshot, error) in
        if let snapshot = snapshot {
            DispatchQueue.main.asyncAfter(deadline: time) {
                let profileModels = snapshot.documents.map { (document) -> Profile in
                    if let profileModel = Profile(dictionary: document.data(), id: document.documentID) {
                        return profileModel
                    } else {
                        fatalError("Error!")
                    }
                }

                self.profile = profileModels
                self.document = snapshot.documents
                self.tableView.reloadData()
            }
        }
    }
}

那么我如何使函数observeQuery成为我的结构ProfileFavouriteList

1 个答案:

答案 0 :(得分:2)

您可以使用通用函数:

SymbolLayer