XLFormDescriptor 在 Swift 中用标题初始化
XLFormDescriptor initialize with Title in Swift
为什么这行得通:
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)'
为什么?
NSLocalizedString 有非可选注释,而您将 nil 传递给它。将注释更改为在上下文中有意义的内容,因此 NSLocalizedString 以及 XLFormDescriptor 将被正确初始化。
Ib Objective-C NSLocalizedString
是NSBundle.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
class 添加一个不错的方法以获得不错的语法。这是来自 this answer 的示例:
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
}
}
然后像这样使用它:
let formDescriptor = XLFormDescriptor(title: "Sign Up".localized)
为什么这行得通:
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)'
为什么?
NSLocalizedString 有非可选注释,而您将 nil 传递给它。将注释更改为在上下文中有意义的内容,因此 NSLocalizedString 以及 XLFormDescriptor 将被正确初始化。
Ib Objective-C NSLocalizedString
是NSBundle.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
class 添加一个不错的方法以获得不错的语法。这是来自 this answer 的示例:
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
}
}
然后像这样使用它:
let formDescriptor = XLFormDescriptor(title: "Sign Up".localized)