swift - 如何在 swift 2.3 中使用#undef 指令

标签 swift localization preprocessor-directive nslocalizedstring xcode8

我想在 swift 2.3 中取消定义或重写 NSLocalizedString,我搜索了很多相关内容,最后我在 Objective C 中找到了一种方法来执行此操作,如下所示。

#undef NSLocalizedString
#define NSLocalizedString(key,_comment) your_function_name

我想快速实现这个功能。 我只知道 NSLocalizedStringNSBundle.h 中的宏,用于 Objective C。所以我们可以重新定义它。但是对于 swift 我们无法实现。我只想重新定义或为 swift 覆盖 NSLocalizedString 函数。请帮我解决这个问题。我们将不胜感激。

最佳答案

NSLocalicedString 是 Swift 中的一个全局方法。

全局函数不能被覆盖,但可以重新定义。要重新定义该方法,只需声明一个新版本。所选功能将基于范围。例如:

func NSLocalizedString(_ key: String, tableName: String? = nil, bundle: Bundle = Bundle.main, value: String = "", comment: String) -> String {
    return "redefined version in the project"
}

class Test {
    func NSLocalizedString(_ key: String, tableName: String? = nil, bundle: Bundle = Bundle.main, value: String = "", comment: String) -> String {
        return "redefined version in Test"
    }

    func getLocalizedString() -> String{
        return NSLocalizedString("test", comment: "t")
    }
}

class Test2 {
    func NSLocalizedString(_ key: String, tableName: String? = nil, bundle: Bundle = Bundle.main, value: String = "", comment: String) -> String {
        return "redefined version in Test2"
    }

    func getLocalizedString() -> String{
        return NSLocalizedString("test", comment: "t")
    }
}

NSLocalizedString("test", comment: "t") //will return "redefined version in the project"
Test().getLocalizedString() //will return "redefined version in Test"
Test2().getLocalizedString() //will return "redefined version in Test2"

关于swift - 如何在 swift 2.3 中使用#undef 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47053536/

相关文章:

c# - 如何在.net (C#/ASP.Net) 开发中使用 xliff 或 po l10n 文件格式

c - 使用以前未定义的宏时不会出现编译器错误

objective-c - 桥接头不适用于两个框架 (Flurry)

ios - UIImagePickerControler.Camera 上的简单叠加 View

ios - 不能只用名称填充 TableView

ruby-on-rails - 根据当前语言环境在 Rails 中显示小时格式(上午/下午或下午)

ios - 无法将值存储到全局数组 SWIFT 中

iPhone/iOS : How can I get a list of localized strings in all the languages my app is localized in?

c++ - 相等性的预处理器测试总是评估为真

c++ - 结构包装重复