2

在编写扩展时是否可以将扩展Array限制为特定Array类型?我想要做的是添加一个Array仅适用于 Arrays 类型的扩展[SKTexture]

我不希望扩展对包含其他类型(即[Int], [Double],[String]等)的数组做任何事情

4

1 回答 1

0

我同意上面的评论,即不可能编写这样的扩展,但我想建议使用全局函数,并可以选择柯里化它以获得更大的灵活性。

有关一些背景信息,请参阅Ole Begemann 的这篇博客文章,他在 Swift 中指出,

实例方法只是将实例作为第一个参数的柯里化函数。

instance.function()所以从斯威夫特的角度来看,和之间没有区别function(instance)()

我不知道您要做什么,但是看起来像这样的全局函数...

func skTextureFunc(textures: [SKTexture])(arg: SomeArgType) { }

...就所有意图和目的而言,与可以绑定到特定实例的实例方法完全相同[SKTexture]

如果您愿意,您可以将该函数部分应用于[SKTexture]您将重复使用的特定实例,然后将其用作绑定到该实例的实例方法。因此,例如:

class Example {
    var localSKTextureFunc: SomeArgType -> () {
        return skTextureFunc(textureArray)
    }

    let textureArray = [SKTexture]()
}

因此,在全局范围内,您始终可以使用 curried 函数,在本地(在类内部),您可以将 curried 函数绑定到类的特定实例。

我知道这不完全是您所要求的,但我认为这是最好的解决方法,因为我们不能编写像您描述的那样的扩展。

于 2015-04-28T17:14:29.020 回答