2016-11-22 69 views
1

Swift 3在NSLocale(现在的Locale)类中引入了很多更改。我需要执行方法swizzle NSLocale.currentLocale()来执行一些助手的单元测试。随着雨燕2.3,我可以用这个方法:从swift 2.3到swift的NSLocale.currentLocale的端口方法swizzle 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) 
     } 
    } 
} 

现在的问题是,随着斯威夫特3 currentLocale不再,虽然它已被替换为财产current

如何才能达到与Swift 3相同的结果?

回答