我有这个getData通用网络调用,它有一个完成处理程序:
func getData<K: Codable>(dataType : DataType, result: (Result<[K]>) -> Void) {
networkManager.request(route: dataType) { (results:Result<[K]>) in
switch results {
case .success:
switch dataType {
case .users: self.networkDelegate.didLoadUserData()
case .albums: self.networkDelegate.didLoadAlbumsData()
case .comments: self.networkDelegate.didLoadCommentsData()
case .photos: self.networkDelegate.didLoadPhotosData()
case .posts: self.networkDelegate.didLoadPostData()
case .todos: self.networkDelegate.didLoadTodosData()
}
case .error(let error): self.networkDelegate.onError(error: error)
}
}
}
这是对该方法的调用:
router.getData(dataType: DataType.albums) { (result:Result<[PostModel]>) in
//receives results but there is nothing to handle as the data is being sent via delegates
}
我不想在router.getData()中有一个完成处理程序,因为我想使用委托来通知我的控制器数据的下载状态。
因此,我使用了相同的方法(getData),但没有完成处理程序,签名如下:
func getData<K:Codable>(dataType : DataType, result: Result<[K]>) {
networkManager.request(route: dataType) { (results:Result<[K]>) in
//here the delegates would call back my controller with the data
}
}
唯一的区别是,现在可以在没有任何完成处理程序块的情况下进行调用,所以现在理想情况下,我应该能够像这样调用它:
router.callToData(dataType: DataType.albums, result: (Result<[PostModel]>))
但是我有一个错误:
Cannot convert value of type '(Result<[PostModel]>).Type' to expected argument type 'Result<[_]>'
我尝试了一切,但我找不到解决办法。有人能帮忙吗?
func getData<K:Codable>(dataType : DataType, result: Result<[K]>) {}
这意味着您必须传递<code>Result类型的值
func getData<K: Codable>(dataType : DataType, result: Result<[K]>.Type) {}
^^^^^
它将以这种方式命名:
getData(dataType: DataType.albums, result: Result<[PostModel]>.self)
^^^^^
但我不建议这样做。传递 K
本身,这变得简单得多:
func getData<K: Codable>(dataType : DataType, result: K.Type) {}
^^^^^^
getData(dataType: DataType.albums, result: PostModel.self)
^^^^^^^^^^^^^^
问题内容: 我在Go中创建了Direct3D9包装器,该包装器使用CGo与C中的COM对象进行接口。 我想摆脱Windows下对C编译器的依赖,因此用户不必安装MinGW或Cygwin即可使用Go中的DirectX。 问题在于d3d9.dll不会公开C函数,而是使用COM。加载DLL(带有)后,可以直接调用的唯一函数是。这将返回一个COM对象,该对象将所有功能公开为方法。 如何在没有CGo的纯Go
在过去的一周左右,我一直在绞尽脑汁,真的需要一些帮助。我的apk构建得很好,在linux上运行main.py工作得很好,然而,当在我的galaxy s6上运行apk时,它在打开后不久就崩溃了。我尝试更新buildozer,kivy,确保所有的依赖关系都得到满足,并包含在规范文件中(如下)。以及尝试无数其他解决方案,如更改api、更新所有构建工具等。 有人有什么想法吗?这里有一个到logcat的链接
问题内容: 这是使用awt包的Java图形的初学者问题。我在网上找到了这段代码来绘制一些简单的图形。 在main方法中,在画布上没有调用paint()。但是我运行了该程序并且它可以工作,那么paint()方法如何运行? 问题答案: 该方法由事件调度线程(EDT)调用,并且基本上不受您的控制。 它的工作方式如下:当 实现 用户界面(以您的情况为例)时,Swing将启动EDT。然后,此EDT线程在后台
我有一个问题要解决,我应该在哪里从使用Java8 streams的员工列表中找到性别为男性的第n个员工,如果没有找到,则返回可选的空。 下面是接受Employee对象列表和整数n的方法,其中n表示必须返回的第n个男性雇员(如果存在的话)。
问题内容: 我是Swift和SpriteKit的新手。SpriteKit Actions的许多示例都在Objective C中,在Swift中我无法映射到它,也无法使用。 如果运行SKAction,并且在完成SKAction后又想做其他事情,那么如何在Swift中做到这一点呢? 任何想法将不胜感激。 编辑: 问题答案: 您的完成代码不会被调用,因为您的“死亡”操作将永远运行,这意味着它永远不会结束
我想使用新的JSR-353(用于JSON处理的JavaAPI)与大家分享我的问题/答案。具体地说,您可以在两种不同的“API”中操作JSON数据:流和对象API。 如果你在谷歌上输入“jsr-353教程”,你会得到很多结果。 https://jcp.org/en/jsr/detail?id=353~具体请求的详细信息。 https://jsonp.java.net/~API的主站点,还将您链接到此