XLFormDescriptor 在 Swift 中使用 Title 进行初始化

Posted

技术标签:

【中文标题】XLFormDescriptor 在 Swift 中使用 Title 进行初始化【英文标题】:XLFormDescriptor initialize with Title in Swift 【发布时间】:2015-08-06 11:46:18 【问题描述】:

为什么这样可以正常工作:

let formFescriptor = XLFormDescriptor(title: "Sign Up");

还有这个:

let formFescriptor = XLFormDescriptor(title: NSLocalizedString("Sign Up", comment: nil));

给我错误:

Cannot invoke initializer for type 'XLFormDescriptor' with an argument list of type '(title: String)'

为什么?

【问题讨论】:

【参考方案1】:

NSLocalizedString 具有非可选注释,而您将 nil 传递给它。将注释更改为在上下文中有意义的内容,以便 NSLocalizedString 以及 XLFormDescriptor 正确初始化。

【讨论】:

确实!我之前不知道= default))NSLocalizedString("Sign Up", comment: "") 也可以。【参考方案2】:

ib Objective-C NSLocalizedStringNSBundle.h中定义的宏:

#define NSLocalizedString(key, comment) \
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

在 Swift 中它是一个函数:

func NSLocalizedString(key: String, tableName: String? = default, bundle: NSBundle = default, value: String = default, #comment: String) -> String

您可以将其用作:

let title = NSLocalizedString("Sign Up", tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
let formDescriptor = XLFormDescriptor(title: title)

或者您可以使用从宏调用的等效代码:

let title = NSBundle.mainBundle().localizedStringForKey("Sign Up", value: nil, table: nil)
let formDescriptor = XLFormDescriptor(title: title)

另一个不错的想法是在String 类中添加一个不错的方法来获得不错的语法。以下是来自this answer 的示例:

extension String 
    var localized: String 
        return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
    

然后像这样使用它:

let formDescriptor = XLFormDescriptor(title: "Sign Up".localized)

【讨论】:

以上是关于XLFormDescriptor 在 Swift 中使用 Title 进行初始化的主要内容,如果未能解决你的问题,请参考以下文章

swift 优雅地处理Swift中可本地化的字符串。注意:此代码在Swift 2中,需要在现代Swift中使用更新。

swift 教程 swift介绍

我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?

在swift中导入swift链接的objc类

在 Swift 项目中使用 Objective C 类中的 Swift 类

在 Swift 项目中使用 Objective C 类中的 Swift 类