Syntax 使用NSDictionary的Swift可选链接

Syntax 使用NSDictionary的Swift可选链接,syntax,swift,xcode6,optional-values,Syntax,Swift,Xcode6,Optional Values,请帮忙重拍这个 if let field = parent_obj?.getFieldForCode(code) { if let stored_value = field["value"] as? String { 转换为单行中的可选链接语法。我试着这样做: let stored_value = parent_obj?.getFieldForCode(code)?["value"] as? String let stored_value: String? = parent_obj

请帮忙重拍这个

 if let field = parent_obj?.getFieldForCode(code) {
    if let stored_value = field["value"] as? String {
转换为单行中的可选链接语法。我试着这样做:

let stored_value = parent_obj?.getFieldForCode(code)?["value"] as? String
let stored_value: String? = parent_obj?.getFieldForCode(code)?["value"] as? NSString
并得到一个错误:

Type 'String' does not conform to protocol 'NSCopying'
这是我的函数头:

func getFieldForCode(code: String) -> NSDictionary? 
可能吗?我这样问是因为每当我使用NSArray和NSDictionary时,我的代码看起来很糟糕:

if let code = self.row_info["code"] as? String {
        if let value_field = self.row_info["value_field"] as? String {
            if let field = parent_obj?.getFieldForCode(code) {
                if let stored_value = field["value"] as? String {
                    if let fields = self.fields_set{
                        if let current_value = fields[indexPath.row][value_field] as? String {

有什么建议吗?

您不能将其直接转换为
字符串
,因为您正在从
NSDictionary
中提取它,并且正如错误所说,
字符串
不符合
NSCopying
。但是,
String
被桥接到
NSString
,并且
NSString
不符合
NSCopying
。因此,通过一点施法/桥接技巧,您可以使其工作如下:

let stored_value = parent_obj?.getFieldForCode(code)?["value"] as? String
let stored_value: String? = parent_obj?.getFieldForCode(code)?["value"] as? NSString
注意:如果在可选绑定中使用此选项(看起来像是您想要的),请不要忘记从
存储值的类型声明中删除


我相信您只需要一些参数:
let stored_value=(parent_obj?.getFieldForCode(code))?[“value”]as?字符串
否,我与parens有相同的错误。。。