Swift 3 在 NSLocale(现在的 Locale)类中引入了很多变化。我需要执行方法 swizzleNSLocale.currentLocale()
来执行一些助手的单元测试。使用 Swift 2.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)
}
}
}
现在的问题是 Swift 3currentLocale
不再是,它已经被 property 取代了current
。
Swift 3 怎么能达到同样的效果呢?