我必须修改一个Objective-C方法来获取NSObject
参数,该参数实际上应该是NSString
或NSLocalizedString
。最初该方法被声明为采用NSString
参数,但我需要灵活地传递NSString
或NSLocalizedString
,我发现令我沮丧的只有{{} 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}}。
答案 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
。如果您要对NSObject
和NSString
使用NSLocalizedString
,请将Swift String
投射为NSString
。
"my string" as NSString
或者,考虑使用协议并同时扩展NSString
和NSLocalizedString
以符合它。