我正在写这样的功能
func issueArrayFromResponse(response: DataResponse<Any>) -> Result<[Issue]> {}
然而这种功能出现很多次,例如repoArrayFromResponse,gistArrayFromRespnse等等。所以我试着将这些功能集于一身。
func arrayFromResponse<T>(response: DataResponse<Any>) -> Result<[T]> {}
问题是我没有T型初始化程序,也不知道如何实现它。在issueArrayFromResponse
的情况下,我有一个类Issue
并且它有初始化器:init(json:[[String:Any]]),所以我能够写
issue = Issue(json: item)
但是,如果arrayFromResponse<T>
,编译器会说'T' cannot be constructed because it has no accessible initializers
如何为T创建初始值设定项?
答案 0 :(得分:2)
我认为最简单的方法是制定协议。 你可以制定这样的协议:
protocol ResultProtocol {
}
并确认您的所有课程
class Issue: ResultProtocol {
init(json: String) {
}
}
然后你可以:
func arrayFromResponse<T: ResultProtocol>(response: DataResponse<Any>) -> Result<[T]> {
return Result<[T]>()
}