Ios 通用toArray<;T>;函数,该函数可以调用类型T上的init

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

我有一个名为FlowerCategory的结构,如下所示:

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)
?因为它看起来很难看,我想做得更好:)