Нашел это, это будет полезно только вам, если вы собираетесь использовать NSLocalizedString в побочных классах. протестировал его на Swift 4 со следующими настройками
extension NSObject {
func NSLocalizedString(_ key: String, comment: String) -> String {
return "My custom localization"
}
static func NSLocalizedString(_ key: String, comment: String) -> String {
return "My custom localization"
}
}
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
myLabel.text = NSLocalizedString("mystring",comment:"")
}
}
должно работать так же для swift 2.3 (без подчеркивания перед параметром key
)
Обновлять
Это требует обходного пути при работе с замыканиями, потому что Swift будет ожидать, что вы будете использовать NSLocalizedString
с self
вот так, self.NSLocalizedString("mystring",comment:"")
. Обходной путь в этом сценарии — присвоить строку let
/var
вне замыкания.
Пример:
// Doesn't work
self.present(anotherVc, animated: true) { [weak self] in
self?.myLabel.text = NSLocalizedString("mystring", comment: "") // compiler will throw an error
}
// Does work
let string = NSLocalizedString("mystring", comment: "")
self.present(anotherVc, animated: true) { [weak self] in
self?.myLabel.text = string
}
Для инициализаторов свойств компилятор будет использовать статическую функцию, поэтому важно установить их обе.
Пример:
class MyClass: NSObject {
// This let
let myStr = NSLocalizedString("mystring",comment:"")
}
extension NSObject {
func NSLocalizedString(_ key: String, comment: String) -> String {
return "My custom localization"
}
// Uses the static method
static func NSLocalizedString(_ key: String, comment: String) -> String {
return "My custom localization"
}
}
person
Samer Murad
schedule
10.11.2017