1

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 3currentLocaleではもはやなく、プロパティに置き換えられたことcurrentです。

Swift 3 で同じ結果を得るにはどうすればよいでしょうか?

4

1 に答える 1

3

currentの (読み取り専用) 計算プロパティですNSLocale:

open class var current: Locale { get }

Objectice-C プロパティ ゲッターのセレクターを作成するには、

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

SE-0064 プロパティ ゲッターおよびセッターの Objective-C セレクターの参照 も参照してください。

于 2016-11-22T10:44:01.837 に答える