如何使用自定义功能工具扩展Swift Array<T>或T[]类型?
浏览Swift的API文档显示,Array方法是其扩展T[],例如:
extension T[] : ArrayType {
//...
init()
var count: Int { get }
var capacity: Int { get }
var isEmpty: Bool { get }
func copy() -> T[]
}
Run Code Online (Sandbox Code Playgroud)
复制和粘贴相同的源并尝试任何变化时,例如:
extension T[] : ArrayType {
func foo(){}
}
extension T[] {
func foo(){}
}
Run Code Online (Sandbox Code Playgroud)
它无法构建错误:
标称类型
T[]不能扩展
使用完整类型定义失败Use of undefined type 'T',即:
extension Array<T> {
func foo(){}
}
Run Code Online (Sandbox Code Playgroud)
而且它也失败,Array<T : Any>和Array<String>.
好奇Swift让我扩展一个无类型数组:
extension Array …Run Code Online (Sandbox Code Playgroud) 坦率地说,我是学习扩展创建和使用的新手.
我想创建一个类别(在swift 3.0中扩展),可以在整个应用程序中使用它来执行Array的重复操作.
这是我在研究时所看到和理解的,我想创建一个扩展,其中包含各种方法,这些方法应该是通用的,而不是基于创建单独扩展所需的数据类型.
在上面的示例中,如果我们将使用特定的数据类型明智扩展,我们将需要创建单个扩展.如果有任何方法可以创建泛型类别(在swift中扩展),我想要一个指导.
extension _ArrayType where Generator.Element == Intextension Array where Element: Equatableextension Array where Element == Intextension _ArrayType where Generator.Element == Floatextension SequenceType where Self.Generator.Element: FloatingPointTypeextension Array where Element: DoubleValueextension Sequence where Iterator.Element == String,等等...
注意:简而言之,我们可以考虑在单个扩展中执行基于Array的操作,而不是按照上述要求为每个数据类型创建单个扩展.