Ios 通用toArray<;T>;函数,该函数可以调用类型T上的init
我有一个名为FlowerCategory的结构,如下所示:Ios 通用toArray<;T>;函数,该函数可以调用类型T上的init,ios,swift,Ios,Swift,我有一个名为FlowerCategory的结构,如下所示: struct FlowerCategory { var id :Int? var title :String var imageURL :String } extension FlowerCategory { init?(node :Node) { // do something here } } extension Node { func toArra
struct FlowerCategory {
var id :Int?
var title :String
var imageURL :String
}
extension FlowerCategory {
init?(node :Node) {
// do something here
}
}
extension Node {
func toArray<T>() -> [T]? {
guard let nodes = self.nodeArray else {
return nil
}
return nodes.flatMap(T.init) // This will NOT work
}
}
我正在Node类上创建一个扩展,它将节点转换为强类型类数组。问题是我无法调用T.init初始值设定项,如下所示:
struct FlowerCategory {
var id :Int?
var title :String
var imageURL :String
}
extension FlowerCategory {
init?(node :Node) {
// do something here
}
}
extension Node {
func toArray<T>() -> [T]? {
guard let nodes = self.nodeArray else {
return nil
}
return nodes.flatMap(T.init) // This will NOT work
}
}
扩展节点{
func toArray()->[T]{
保护let节点=self.noderray else{
归零
}
return nodes.flatMap(T.init)//这不起作用
}
}
还有什么可以做我想做的吗
更新:
什么是
节点
?用T()或T()替换T.init怎么样@这不起作用。我更新了上面问题中的代码。问题是编译器对类型T
一无所知–但无论如何,它看起来并不值得扩展,为什么不直接说someNode.noderray?.flatMap(FlowerCategory.init)
?因为它看起来很难看,我想让它更好:)什么是节点
?用T()或T()替换T.init怎么样@这不起作用。我更新了上面问题中的代码。问题是编译器对类型T
一无所知–但无论如何,它看起来并不值得扩展,为什么不直接说someNode.noderray?.flatMap(FlowerCategory.init)
?因为它看起来很难看,我想做得更好:)