【问题标题】:Call func with various struct使用各种结构调用 func
【发布时间】:2018-11-25 16:09:07
【问题描述】:

我想创建一个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 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()
            }
        }
    }
}

那么我如何使 func observeQuery 使用我的结构 ProfileFavouriteList

【问题讨论】:

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


    【解决方案1】:

    你可以使用泛型函数:

    func observeQuery<T>(someObject: T) {
        if someObject is Profile {
            //do something
        } else if someObject is FavouriteList {
            //do something
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多