Я согласен с комментариями выше, что это не возможно, чтобы написать расширение, как это, но хотелось предложить вместо этого использовать глобальную функцию, с возможностью каррирования для большей гибкости.
Для некоторых справочной информации см this blog post by Ole Begemann, где он отмечает, что в Swift,
метода экземпляра являются только выделанными функциями, которые принимают экземпляр в качестве первого аргумента.
Таким образом, с точки зрения Swift нет никакой разницы между instance.function()
и .
Я не знаю, что вы пытаетесь сделать, но глобальная функция, которая выглядит следующим образом ...
func skTextureFunc(textures: [SKTexture])(arg: SomeArgType) { }
..., для всех намерений и целей, точно так же, как метод экземпляра, который может быть привязан к конкретному экземпляру [SKTexture]
.
И если вы хотите, вы можете частично применить функцию к определенному экземпляру [SKTexture]
, который будет использоваться повторно, а затем использовать его, как если бы это был метод экземпляра, связанный с этим экземпляром. Так, например:
class Example {
var localSKTextureFunc: SomeArgType ->() {
return skTextureFunc(textureArray)
}
let textureArray = [SKTexture]()
}
Так во всем мире вы всегда можете использовать функцию выделанной и локально (внутри класса), вы можете связать выделанной функцию конкретного экземпляра класса.
Я знаю, что это не совсем то, что вы просили, но я думаю, что это лучшая работа для того, что мы не можем писать расширения, как тот, который вы описываете.
Вы не можете, к сожалению. Я также желаю этой функциональности. Некоторые из лучших попыток существуют здесь: http://stackoverflow.com/questions/24047164/extension-of-constructed-generic-type-in-swift –
Спасибо, Андрей, я посмотрю. – fuzzygoat
Одинаковая проблема здесь: http://stackoverflow.com/questions/24938948/array-extension-to-remove-object-by-value (возможно дублировать?) Из голосовой ответ: * «Вы не можете написать метод на общий тип, более ограничивающий шаблон. "* –