在func中接受Swift托收

在func中接受Swift托收,swift,Swift,我制作了一个自定义类实现集合,它非常有用!我基本上只是转发我的内部数组类并免费获取map/filter/etc,但现在我有了一个如下的方法: init(items: [T]) { self.items = items } 我如何将自定义对象传递给此对象?签名应该是什么?我知道我的类不是数组。如果您的项实现了集合,那么您可以让init获取集合: 一种解决方案是将ArrayyourCustomCollection传递给 现有项目:[T] 或者,定义一个接受T元素集合的init方法: cla

我制作了一个自定义类实现集合,它非常有用!我基本上只是转发我的内部数组类并免费获取map/filter/etc,但现在我有了一个如下的方法:

init(items: [T])
{
    self.items = items
}
我如何将自定义对象传递给此对象?签名应该是什么?我知道我的类不是数组。

如果您的项实现了集合,那么您可以让init获取集合:


一种解决方案是将ArrayyourCustomCollection传递给 现有项目:[T]

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

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

    init<C: Collection>(items: C) where C.Element == T {
        self.items = Array(items)
    }
}
class MyClass<T> {
    var items: [T] = []

    init<S: Sequence>(items: S) where S.Element == T {
        self.items = Array(items)
    }
}
或者,如果希望项是集合而不是数组:

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

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

这是另一个类的init方法吗?self.items必须是一个数组,还是要更改它?您可以更改init方法吗?-最简单的解决方案是将ArrayyourCustomCollection传递给现有的init方法。init来自另一个类yes。如果你不知道数组技巧,那就行了,你不能这么做。协议“Collection”只能用作泛型约束,因为它具有自身或关联的类型要求。这就是我要找的!我们可以让项目更通用吗?我只是想让它成为一个集合,在那里我可以循环等等?所以我可以避免数组初始值设定项?
class MyClass<C: Collection> {
    var items: C

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