本文介绍了如何扩展通用类型的数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! class LinkedNode< T>< p> { 让数据:T var next:LinkedNode< T> ;? $ b $ func traverseList(process:(LinkedNode< T>) - >()){...} } 我想要做的就是将Array扩展为具有一个将我的LinkedNode类转换为一个链接节点数组的初始化程序。我试过这个: 扩展数组其中Element == LinkedNode< T> { init(node:LinkedNode< T>) { var result = [LinkedNode< T>]() traverseList {result.append($ 0) } 返回结果} } 但是, T是未申报的。我试图把它拿出来做其他事情,但没有任何成效。 我能够通过LinkedNode类中的方法获得相同的结果: func array() - > [LinkedNode< T> { var result = [LinkedNode< T>]() traverseList {result.append($ 0)} 返回结果} 但我更喜欢数组初始化器,因为很多其他集合类型都有这个初始化器。解决方案您可以在初始化程序定义中声明泛型参数。 $ init< T>(node:LinkedNode< T>)其中Element == LinkedNode< T> { var result = [LinkedNode< T>]() node.traverseList {result.append($ 0)} self = result } } I have a class for a linked list declared like this: class LinkedNode<T> { let data: T var next: LinkedNode<T>? func traverseList(process: (LinkedNode<T>) -> ()) { ... }}What I want to do is extend Array to have an initialiser that converts my LinkedNode class to an array of linked nodes. I tried this:extension Array where Element == LinkedNode<T> { init(node: LinkedNode<T>) { var result = [LinkedNode<T>]() traverseList { result.append($0) } return result }}But that gives errors that T is undeclared. I have tried taking it out and doing other things, but nothing has worked.I was able to get the same results with a method on the LinkedNode class: func array() -> [LinkedNode<T>] { var result = [LinkedNode<T>]() traverseList { result.append($0) } return result }But I would prefer an array initialiser since so many other collection types have that initialiser. 解决方案 You can declare a generic parameter in initializer definition.extension Array { init<T>(node: LinkedNode<T>) where Element == LinkedNode<T> { var result = [LinkedNode<T>]() node.traverseList { result.append($0) } self = result }} 这篇关于如何扩展通用类型的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
07-15 21:41