如何在swift中为函数创建别名?
例如
我想打电话
LocalizedString("key")
Run Code Online (Sandbox Code Playgroud)
它应该打电话
NSLocalizedString("key", comment:"")
Run Code Online (Sandbox Code Playgroud)
我看到了typealias命令,但看起来它只适用于类型.
Ant*_*nio 18
函数被命名为闭包,因此您只需将函数赋值给变量:
let LocalizedString = NSLocalizedString
Run Code Online (Sandbox Code Playgroud)
您也可以为类/结构方法创建伪别名.每个方法实际上都是一个静态(类)curried函数,以类实例作为其第一个参数.所以给了一个课:
class MyClass {
var data: Int
init(data: Int) {
self.data = data
}
func test() {
println("\(data)")
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将test方法分配给变量:
let test = MyClass.test
Run Code Online (Sandbox Code Playgroud)
然后将其调用为:
var instance = MyClass(data: 10)
test(instance)()
Run Code Online (Sandbox Code Playgroud)
UPDATE
我刚刚意识到我错过了你问题中的一个重要细节:你想要隐藏comment参数.我提议的解决方案不允许这样做,而@ rintaro的解决方案确实如此.
但是我使用不同的方法:我创建一个String实现计算属性的扩展:
extension String {
var localized: String {
return NSLocalizedString(self, comment: "")
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以在任何字符串变量或文字上调用它:
var string = "test_resource"
string.localized
"another_resource".localized
Run Code Online (Sandbox Code Playgroud)
最短的是:
let LocalizedString = { NSLocalizedString($0, comment:"") }
Run Code Online (Sandbox Code Playgroud)
但是,它实际上是一个新功能.只是包装NSLocalizedString.
也许你可以使用未记录的@transparent属性.它内联函数调用.在开发者论坛上查看此主题.
@transparent LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
Run Code Online (Sandbox Code Playgroud)
但不建议这样做.此外,只要我的测试,以下所有代码最终都会通过-O优化发出完全相同的LLVM IR代码.
script1:with@transparent
import Foundation
@transparent func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
println(LocalizedString("key"))
Run Code Online (Sandbox Code Playgroud)
script2:没有@transparent
import Foundation
func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
println(LocalizedString("key"))
Run Code Online (Sandbox Code Playgroud)
script3:直接NSLocalizedString调用
import Foundation
func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
println(NSLocalizedString("key", comment:""))
Run Code Online (Sandbox Code Playgroud)
以上所有内容都是为了执行直接NSLocalizedString呼叫.
但是,以下代码会发出不同的代码:
script4:关闭包装
import Foundation
let LocalizedString = { NSLocalizedString($0, comment:"") }
println(NSLocalizedString("key", comment:""))
Run Code Online (Sandbox Code Playgroud)
它也是内联的,但插入了附加refcount指令LocalizedString.
所以,作为结论,你应该简单地使用这个:
func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3689 次 |
| 最近记录: |