najkrótsza z nich jest:
let LocalizedString = { NSLocalizedString($0, comment:"") }
Ale to faktycznie nowa func tację. Po prostu opakowanie NSLocalizedString
.
Może można użyć atrybutu @transparent
nieudokumentowane. Powoduje wywołanie funkcji. patrz this topic on Developer Forum.
@transparent LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
Ale nie jest to zalecane. Co więcej, tak długo jak moje testy, wszystkie następujące kody ostatecznie emitują dokładnie ten sam kod LLVM IR z optymalizacją -O
.
script1: z @transparent
import Foundation
@transparent func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
println(LocalizedString("key"))
script2: bez @transparent
import Foundation
func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
println(LocalizedString("key"))
Script3: Bezpośredni NSLocalizedString
wezwanie
import Foundation
func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
println(NSLocalizedString("key", comment:""))
Wszystkie powyższe są przeznaczone do wykonywania bezpośredniego połączenia NSLocalizedString
.
Ale poniższy kod emituje różne:
script4: Zamknięcie owijania
import Foundation
let LocalizedString = { NSLocalizedString($0, comment:"") }
println(NSLocalizedString("key", comment:""))
Jest również włączonych, ale dodatkowe refcount
dyspozycja LocalizedString
jest włożona.
Więc Podsumowując, należy po prostu użyć tego:
func LocalizedString(key:String) -> String {
return LocalizedString(key, comment:"")
}
można utworzyć nową funkcję, która będzie nazywać NSLocalizedString? – kap
Hm, zastanawiałem się, czy istnieje inny sposób ... jak użycie makra lub czegoś. – Caipivara
"Komentarz" jest umieszczany w zlokalizowanym pliku tekstowym i jest bardzo przydatny dla tłumacza, nawet jeśli jest tylko dla ciebie. Ułatwia to zapamiętanie, do czego przeznaczony jest ten ciąg. Ale nie jest to odpowiedź na twoje pytanie. – zisoft