2016-11-22 4 views
1

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?

Antwort

Verwandte Themen