0

我正在尝试通过使用 KeyPaths 更新存储在类的数组属性中的值。这是我的代码:

func listenAndUpdateDocuments<T: JSONDecodable>(
    _ property: ReferenceWritableKeyPath<MyModel, [T]?>,
    from model: MyModel) {
    guard let reference = reference else {
        return
    }
    guard listener == nil else {
        return
    }
    listener = backendClient.listenToDocuments(reference) { [weak model] (result: Result<[T], RequestError>) in
        switch result {
        case .success(let value):
            model?[keyPath: property] = value
        case .failure:
            model?[keyPath: property] = []
        }
    }
}

问题是当我这样调用这个函数时:

myListener.listenAndUpdateDocuments(\.viewers, from: self)

whereviewers是 type [ViewersModel],它总是返回以下错误:

Type of expression is ambiguous without more context

我该如何解决这个问题?我有一个类似版本的代码,但property参数不是数组,并且有效。

4

1 回答 1

0

我为类似的事情苦苦挣扎:

_ = Token.query(on: req).filter(\.expiry < Date()).delete()

我找到的解决方案是使用更新的 api 来处理我的请求参数。

_ = Token.query(on: req).filter(\.expiry, .lessThan, Date()).delete()

它与密钥路径本身的关系比我想象的要少!

于 2019-09-24T23:00:12.573 回答