gpt4 book ai didi

swift - NSLocale.currentLocale 的端口方法 swizzle 从 swift 2.3 到 swift 3

转载 作者:搜寻专家 更新时间:2023-11-01 06:36:38 24 4
gpt4 key购买 nike

Swift 3 在 NSLocale(现在是 Locale)类中引入了很多变化。我需要执行 NSLocale.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 3 currentLocale 不再存在,它已被属性 current 取代。

如何使用 Swift 3 实现相同的结果?

最佳答案

currentNSLocale 的(只读)计算属性:

open class var current: Locale { get }

您为 Objectice-C 属性 getter 构建了一个选择器

let originalSelector = #selector(getter: NSLocale.current)

另见 SE-0064 Referencing the Objective-C selector of property getters and setters .

关于swift - NSLocale.currentLocale 的端口方法 swizzle 从 swift 2.3 到 swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40739470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com