Ich versuche, die currentLocale-Ausgabe des Geräts zu ändern, um einige interessante Komponententests durchzuführen. Dies ist der Code, den ich verwende, aber es scheint, dass die zurückgegebene currentLocale nicht Ich werde übergangen. Irgendein Hinweis?NSLocale verwendet Methode swizzling, um die currentLocale-Ausgabe zu Testzwecken zu ändern
extension NSLocale {
class func frLocale()->NSLocale{
return NSLocale(localeIdentifier: "fr_FR")
}
class func forceCurrentLocale(){
let originalSelector = #selector(NSLocale.currentLocale)
let swizzledSelector = #selector(self.frLocale)
let originalMethod = class_getClassMethod(self, originalSelector)
let swizzledMethod = class_getClassMethod(self, swizzledSelector)
let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))
if didAddMethod {
class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
} else {
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
}
// EDIT
Der obige Code funktioniert nicht. Aber wenn ich es so schreibe es funktioniert:
class func forceCurrentLocale(){
let originalSelector = #selector(NSLocale.currentLocale)
let swizzledSelector = #selector(NSLocale.frLocale)
let originalMethod = class_getClassMethod(self, originalSelector)
let swizzledMethod = class_getClassMethod(self, swizzledSelector)
method_exchangeImplementations(originalMethod, swizzledMethod)
}
was mit class_addMethod
in diesem Fall falsch ist?