Swift 3 führte eine Menge Änderungen in der Klasse NSLocale (jetzt Locale) ein. Ich muss Methode swizzle von NSLocale.currentLocale()
durchführen, um Unit-Test einiger Helfer durchzuführen. Mit 2,3 Swift konnte ich diese Methode verwenden:Port-Methode Swizzle von NSLocale.currentLocale von Swift 2.3 zu Swift 3
extension NSLocale {
@nonobjc static var ttt_locale = "us_US"
@nonobjc static var ttt_swizzled = false
class func customizedLocale()->NSLocale{
return NSLocale(localeIdentifier: NSLocale.ttt_locale)
}
class func forceLocale(identifier:String){
NSLocale.ttt_locale = identifier
if !NSLocale.ttt_swizzled {
NSLocale.ttt_swizzled = true
let originalSelector = #selector(NSLocale.currentLocale)
let swizzledSelector = #selector(self.customizedLocale)
let originalMethod = class_getClassMethod(self, originalSelector)
let swizzledMethod = class_getClassMethod(self, swizzledSelector)
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
}
Das Problem ist jetzt, dass mit Swift 3 currentLocale
nicht mehr ist aber, und es hat mit der Eigenschaft current
ersetzt worden.
Wie konnte das gleiche Ergebnis mit Swift 3 erreicht werden?