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相同的結果?