Псевдоним функции 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:"")
}