将NSLocalizedString传递给NSObject参数的Swift方法将无法编译

时间:2017-01-17 16:35:33

标签: ios objective-c swift casting nsobject

我必须修改一个Objective-C方法来获取NSObject参数,该参数实际上应该是NSStringNSLocalizedString。最初该方法被声明为采用NSString参数,但我需要灵活地传递NSStringNSLocalizedString,我发现令我沮丧的只有{{} 1}}作为共同的祖先。

对Objective-C方法的参数类型的这一更改在一些现有的Swift代码中引入了一些问题,这些代码使用NSObject参数调用该方法:

NSLocalizededString

这是实际的代码,我认为这些代码不会更具启发性:

NSLocalizedString('random key', comment: 'Key name')

未修改,代码产生此错误:

  

无法将'String'类型的值转换为预期的参数类型'NSObject!'

如果我尝试将appDelegate.menuOverlayViewController.showPopup(withStateName: "didRequestTrackChange", withTitle: NSLocalizedString("localization.popup.title", comment: "Success!"), withIconName: "icon_like", withBody:body) 强制转换为NSLocalizedString,请执行以下操作:

NSObject

我遇到以下错误:

  

传递给不带参数的调用的参数

我该如何解决这个问题?我对Swift相对较新,所以不要理解我如何投射某些内容的细微差别,或者为什么NSObject(NSLocalizedString('random key', comment: 'Key name')) 显然被转换为Swift NSLocalizedString,甚至在传递给String类型的参数之前1}}。

2 个答案:

答案 0 :(得分:0)

而不是

NSObject(NSLocalizedString('random key', comment: 'Key name'))

(NSString(string :NSLocalizedString('random key', comment: 'Key name'))

编辑:

怎么样?
NSLocalizedString('random key', comment: 'Key name') as! NSObject

答案 1 :(得分:0)

Swift String不是对象,而是struct。如果您要对NSObjectNSString使用NSLocalizedString,请将Swift String投射为NSString

"my string" as NSString

或者,考虑使用协议并同时扩展NSStringNSLocalizedString以符合它。