- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在为两个数据库 API(领域和 Firestore)编写数据库访问类。为了精简代码,我尝试使用泛型(#1)来解决整个问题。不幸的是,它不起作用。我在哪里错过了重点?
我尝试定义关联类型(#2)并将它们设置在 RealmAccessStragy 类中。但是在这一点上,如果尝试通过 PersistenceController 访问协议(protocol),编译器将返回错误。
我很感激任何帮助!
enum DataResult<T> {
case success(T)
case failure(Error)
}
protocol DataApiAccess: AnyObject {
func read<U, T>(primaryKey: U, completion: @escaping ((DataResult<T>) -> Void))
}
class RealmAccessStrategy {
...
func read<U, T>(primaryKey: U, completion: @escaping ((DataResult<T>) -> Void)) {
guard let realmObject = realmInstance.object(ofType: realmObjectType, forPrimaryKey: primaryKey) else {
completion(.failure(RealmAccessError.noObject))
return
}
completion(.success(realmObject)) // ERROR: Member 'success' in 'DataResult<_>' produces result of type 'DataResult<T>', but context expects 'DataResult<_>'
}
}
// Later implementation
class PersistenceController {
private let strategy: DataApiAccess
init(use: DataApiAccess) {
self.strategy = use
}
func load<U, T>(primaryKey: U, completion: @escaping ( (DataResult<T>) -> Void ) ) {
strategy.read(primaryKey: primaryKey, completion: completion)
}
}
🆘 错误:“DataResult<>”中的成员“成功”产生“DataResult”类型的结果,但上下文需要“DataResult<>”
enum DataResult<T> {
case success(T)
case failure(Error)
}
protocol DataApiAccess {
associatedtype ReturnType
func read(primaryKey: PrimaryKeyType, completion: @escaping DataApiHandler<ReturnType>)
}
class RealmAccessStrategy: DataApiAccess {
...
// Typealias
internal typealias ReturnType = Object
func read(primaryKey: Any, completion: @escaping ((DataResult<Object>) -> Void)) {
guard let realmObject = realmInstance.object(ofType: realmObjectType, forPrimaryKey: primaryKey) else {
completion(.failure(RealmAccessError.noObject))
return
}
completion(.success(realmObject))
}
}
class PersistenceController {
private let strategy: DataApiAccess // ERROR: Protocol 'DataApiAccess' can only be used as a generic constraint because it has Self or associated type requirements
init(use: DataApiAccess) {
self.strategy = use
}
...
}
}
🆘 错误:协议(protocol)“DataApiAccess”只能用作通用约束,因为它具有 Self 或关联类型要求
最佳答案
您不能设置可变通用协议(protocol),但您可以设置方法
示例代码如下
为基本结果创建枚举:
enum DataResult<T> {
case success(T)
case failure(Error)
}
///Set a protocol generic methods:
protocol DataApiAccess {
func read<T: Codable>(primaryKey: PrimaryKeyType, completion: @escaping (DataResult<T>) -> Void)
}
class RealmAccessStrategy: DataApiAccess {
func read<T: Codable>(primaryKey: PrimaryKeyType, completion: @escaping (DataResult<T>) -> Void) {
// Read data from database
}
}
class NetworkAccessStrategy: DataApiAccess {
func read<T: Codable>(primaryKey: PrimaryKeyType, completion: @escaping (DataResult<T>) -> Void) {
// Get data from request
}
}
class PersistenceController {
private let strategy: DataApiAccess
init(use: DataApiAccess) {
// Set dependency inversion for offline or online state
self.strategy = use
}
func foo() {
// TODO
//strategy.read(primaryKey: <#T##PrimaryKeyType#>, completion: <#T##(DataResult<Decodable & Encodable>) -> Void#>)
}
}
尽情享受吧!
关于swift - 如何通过完成和 resultType 获得泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57166352/
目录 mybatis resulttype 返回值异常 例如:resulttype = "student" 但是当中有些字段为空
我目前正在为两个数据库 API(领域和 Firestore)编写数据库访问类。为了精简代码,我尝试使用泛型(#1)来解决整个问题。不幸的是,它不起作用。我在哪里错过了重点? 我尝试定义关联类型(#2)
我刚刚遇到了通过 Xcode 4.6.2 中的模型编辑器创建的获取请求模板的问题。我尝试更改获取请求的核心数据检查器中的结果类型设置,如下图所示: 但是,当我在代码中加载模板时,这些设置没有反射(re
我想按列对表进行分组并获取计数,然后使用结果创建字典。最后一条语句返回错误 DbExpressionBinding requires an input expression with a collec
我正在尝试声明类型为 AWSTaskCompletionSource 的变量,但我有 ` Generic parameter 'ResultType' could not be inferred 请看
我正在尝试弄清楚如何使用 struts2 XSL ResultType。除了 official documentation 之外,我只是不知道它应该如何工作。 ,我在网上找到了两篇试图解释它的文章(对
考虑创建使用 NSDictionary 作为 resultType 初始化的 NSFetchRequest: let fetchRequest = NSFetchRequest(entityName:
我的 linq 查询有一个大问题 var t = from tl in _GxEntities.T_L join td
根据一些有限的测试,我发现如果我 执行结果类型 = NSDictionaryResultType 的 Fetch 请求 对返回值进行一些操作 存储执行 Fetch 请求的 MOC 步骤 2 中的更改不
我试图在 MyBatis 中选择一个时间戳并将其作为 LocalDateTime(来自 joda-time)返回。 如果我尝试将结果作为 java.sql.Timestamp 返回,我的配置工作正常。
摘要 我有三个类(class): Account SpecialAccount (继承自 Account) Profile (0..1 与 SpecialAccount 的关系) 换句话说,一个 Sp
我在运行此查询时遇到异常(使用 LinqPad 进行调试): int[] serviceCodes= new int[] { 1610, 1611, 1612 }; byte[] payModes =
我正在尝试运行以下 linq 查询: var entries = from entry in _db.Entries select new CommentSummary() {
我收到此错误 DbExpressionBinding 需要一个带有集合 ResultType 的输入表达式。在使用 ASP.NET MVC 时仍然非常绿色,所以我不明白发生了什么以及为什么我会收到此错
当我将我的项目转换为 swift 3.0 时,我发现了这个错误 parameter 'ResultType' could not be inferred 我的代码是这样的: let fetchRequ
我正在使用 OData Nuget 包开发 Web API 原型(prototype)。 我在使 LINQ to EF 查询正常工作时遇到了一些问题。 Here are my data model.它
我有一个带有 TPT 继承的模型。 位置(抽象) 街道(派生自位置) GoogleStreetView(1 街道 -> 0..1 GoogleStreetView) 以上每个都有自己的表格。 在我添加
我正在开发 macOS 应用程序,并使用 CoreData 存储在数据库中。应用程序将支持 OS X 10.11 及更高版本。在 OS X 10.12 机器应用程序工作正常,但在 OS X 10.11
我是一名优秀的程序员,十分优秀!