发现this,只有在类内使用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将期望您像这样使用self.NSLocalizedString("mystring",comment:"")
。
在这种情况下的解决方法是将字符串分配给闭包外部的let
/var
。
示例:
self.present(anotherVc, animated: true) { [weak self] in
self?.myLabel.text = NSLocalizedString("mystring", comment: "")
}
let string = NSLocalizedString("mystring", comment: "")
self.present(anotherVc, animated: true) { [weak self] in
self?.myLabel.text = string
}
对于属性初始化器,编译器将使用静态函数,因此设置它们两个非常重要
示例:
class MyClass: NSObject {
let myStr = NSLocalizedString("mystring",comment:"")
}
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"
}
}