相关疑难解决方法(0)

在iOS中本地化字符串:默认(后备)语言?

有没有办法设置在应用程序不支持设备UI语言时使用的默认语言?

示例:我的应用已本地化为英语和德语:

// en.lproj:
"POWER_TO_THE_PEOPLE_BTN" = "Power";
"POWER_PLUG_BTN" = "Power";

// de.lproj:
"POWER_TO_THE_PEOPLE_BTN"  = "Macht";
"POWER_PLUG_BTN" = "Spannung";
Run Code Online (Sandbox Code Playgroud)

现在,如果我在设置为Italian应用程序的UI语言的设备上运行应用程序将使用键字符串POWER_TO_THE_PEOPLE_BTNPOWER_PLUG_BTN.

必须有一种方法来指定应用程序在这种情况下使用的默认(回退)语言.

从上面的例子中可以清楚地看出,使用英文字符串作为键是行不通的.

我现在看到的唯一选择是使用NSLocalizedStringWithDefaultValue而不是NSLocalizedString.

localization internationalization ios

39
推荐指数
4
解决办法
3万
查看次数

有没有办法为AnyObject添加扩展?

在Objective-C中,我创建了一个非常方便的类别(在Swift术语中的扩展) NSObject该添加到任意的键/值对添加到任何的能力NSObject在运行时.它使用关联对象将可变字典附加到对象,然后提供get/set方法,用于从/到该字典获取/设置键/值对.它只有几行代码.

这使得可以在运行时将任意键/值对附加到ANY对象,包括由系统创建的对象.这是关键.在某些情况下,系统框架会向您返回一个对象,您需要能够为其附加值.

此技巧还可以创建具有新实例变量的类别.(好吧,它们不是真的,但是它确实允许你向类别中的对象添加新的状态变量.)

这在Swift 1.2中是不可能的,因为:

  • Swift没有像Objective-C中的NSObject这样的所有对象的基类.它使用AnyObject,这是一种协议.
  • Swift 1.2不允许扩展协议.

在Swift 1.2下我不得不放弃这个.

但Swift 2允许扩展协议.我想"很好,现在我可以添加我的扩展,让我可以向AnyObject添加键/值对!"

没有快乐.

当我尝试为AnyObject创建扩展时:

extension AnyObject: AssociatedObjectProtocol
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

'AnyObject'协议无法扩展

Arghh!如此接近,但不是.似乎该语言明确禁止扩展AnyObject.为什么会这样,有什么办法吗?

我不经常在NSObject上使用我的类别,但是当我这样做时,它是一个救星.我想把它添加到我在Swift中的技巧包中.

我可以像在Objective-C中那样将它添加到NSObject,但这意味着它只适用于从NSObject继承的对象 - 使其不适用于本机Swift类.

protocols swift2

15
推荐指数
2
解决办法
6429
查看次数

覆盖 Swift 中的全局函数

是否可以在 Swift 中覆盖全局函数?

具体来说,我想覆盖NSLocalizedString. 这在 Objective-c ( #undef/ #define) 中很容易,但在 Swift 中NSLocalizedString被定义为全局函数,我找不到覆盖它的方法。

可以创建自己的函数MyLocalizedString,它调用原始函数,NSLocalizedString但随后我将失去 AppCode 对 Localizable.strings 文件的巧妙支持(本地化键的自动完成,IDE 显示本地化文本),我必须确保每次使用NSLocalizedString我的代码中的of被替换为MyLocalizedString.

编辑:我想达到什么目标?我希望能够动态更改 GUI 中的字符串。最简单的方法是重新定义 NSLocalizedString,然后自己在表中查找字符串。如果它不存在,我将使用 Localizable.strings 中的原始字符串。

swift

5
推荐指数
0
解决办法
419
查看次数

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

我想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函数.请帮我解决这个问题.任何帮助都会不胜感激.

localization nslocalizedstring preprocessor-directive swift xcode8.1

5
推荐指数
1
解决办法
292
查看次数