Swift接受func

时间:2018-01-16 09:17:32

标签: swift

我已经制作了一个自定义类工具Collection,效果很好!我基本上只是转发我的内部数组类并免费获取map / filter / etc,但现在我有一个方法如下:

init(items: [T])
{
    self.items = items
}

如何将自定义对象传递给此?签名应该是什么?我知道我的班级不是一个阵列。

2 个答案:

答案 0 :(得分:1)

一种解决方案是将Array(yourCustomCollection)传递给。{ 现有init(items: [T])

或者,定义一个采用T元素集合的init方法:

class MyClass<T> {
    var items: [T] = []

    init<C: Collection>(items: C) where C.Element == T {
        self.items = Array(items)
    }
}

或稍微更一般,T元素的序列

class MyClass<T> {
    var items: [T] = []

    init<S: Sequence>(items: S) where S.Element == T {
        self.items = Array(items)
    }
}

或者,如果您希望items成为集合,而不是数组:

class MyClass<C: Collection> {
    var items: C

    init(items: C) {
        self.items = items
    }
}

答案 1 :(得分:0)

如果您的items实施Collection,那么您可以让init获得Collection

init(items: Collection) {
  self.items = items
}