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

Sum*_*wal 5 localization nslocalizedstring preprocessor-directive swift xcode8.1

我想NSLocalizedString在swift 2.3中取消定义或覆盖,我搜索了很多关于它的内容,最后我在Objective C中找到了一种方法,如下所示.

#undef NSLocalizedString
#define NSLocalizedString(key,_comment) your_function_name
Run Code Online (Sandbox Code Playgroud)

我想在swift中实现这个功能.我只知道Objective C中的NSLocalizedString一个宏.NSBundle.h所以我们可以重新定义它.但是对于swift我们无法实现这一点.我只想重新定义或覆盖swift的NSLocalizedString函数.请帮我解决这个问题.任何帮助都会不胜感激.

Cod*_*256 -1

#undef是一个C 预处理器指令,而 Swift不支持任何预处理器指令#define,包括用于 的复杂宏NSLocalizedString。事实上,它的导入方式为:

/// Returns a localized string, using the main bundle if one is not specified.
public func NSLocalizedString(_ key: String, tableName: String? = default, bundle: Bundle = default, value: String = default, comment: String) -> String
Run Code Online (Sandbox Code Playgroud)

但是,您只需编写自己的实现即可轻松完成预期的行为,而应该自动使用该实现。例如

public func NSLocalizedString(_ key: String, tableName: String? = nil, bundle: Bundle = Bundle.main, value: String = "", comment: String) -> String {
    // Do your magic here!
    return "test"
}
Run Code Online (Sandbox Code Playgroud)

但请不要这样做。最好创建一个不同的函数否则,将不清楚你的函数是否是正在使用的函数,或者你可能会得到:error: ambiguous use of 'NSLocalizedString(_:tableName:bundle:value:comment:)'如果你需要更改签名,即使你只是想让某些东西可选。