Псевдоним функции Swift

как создать псевдоним для функции в swift?

Я хочу позвонить

LocalizedString("key")

и он должен вызвать

NSLocalizedString("key", comment:"")

Я видел typealias команда, но похоже, что она работает только для типов.

2 ответов


функции называются замыканиями, поэтому вы можете просто назначить функцию переменной:

let LocalizedString = NSLocalizedString

вы также можете создавать псевдонимы для методов класса / структуры. Каждый метод на самом деле является статической функцией (class) curried, принимая экземпляр класса в качестве первого параметра. Итак, дан класс:

class MyClass {
    var data: Int

    init(data: Int) {
        self.data = data
    }

    func test() {
        println("\(data)")
    }
}

вы можете назначить test метод переменной:

let test = MyClass.test

и затем вызвать его as:

var instance = MyClass(data: 10)
test(instance)()

обновление

Я только что понял, что пропустил одну важную деталь в вашем вопросе: вы хотите скрыть


самый короткий:

let LocalizedString = { NSLocalizedString(, comment:"") }

но на самом деле это новая функция. Просто обертывание NSLocalizedString.


возможно, вы можете использовать undocumented . Он встраивает вызов функции. см.эта тема на форуме разработчиков.

@transparent LocalizedString(key:String) -> String {
    return LocalizedString(key, comment:"")
}

но это не рекомендуется. Более того, пока мои тесты, все следующие коды в конечном итоге испускают точно такой же LLVM IR-код с -O оптимизация.

script1: С @transparent

import Foundation
@transparent func LocalizedString(key:String) -> String {
    return LocalizedString(key, comment:"")
}
println(LocalizedString("key"))

script2: без @transparent

import Foundation
func LocalizedString(key:String) -> String {
    return LocalizedString(key, comment:"")
}
println(LocalizedString("key"))

script3: Direct NSLocalizedString вызов

import Foundation
func LocalizedString(key:String) -> String {
    return LocalizedString(key, comment:"")
}
println(NSLocalizedString("key", comment:""))

все выше склонны выполнять прямые NSLocalizedString звонок.

но следующий код выдает разные:

script4: закрытие упаковки

import Foundation
let LocalizedString = { NSLocalizedString(, comment:"") }
println(NSLocalizedString("key", comment:""))

он также встроен, но дополнительно refcount инструкция к это.

Итак, в заключение, вы должны просто использовать это:

func LocalizedString(key:String) -> String {
    return LocalizedString(key, comment:"")
}