3

请帮忙重拍这个

 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

并得到一个错误:

Type 'String' does not conform to protocol 'NSCopying'

这是我的函数头:

func getFieldForCode(code: String) -> NSDictionary? 

可能吗?我问它是因为每当我使用 NSArrays 和 NSDictionaries 时,我的代码看起来都很糟糕:

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 {

有什么建议吗?

4

1 回答 1

2

您不能将其直接转换为 a String,因为您将其从 a 中拉出,NSDictionary并且就像错误所说的那样,String不符合NSCopying. 但是,String桥接到NSString,并且NSString 确实符合NSCopying。因此,通过一些铸造/桥接技巧,您可以使其像这样工作:

let stored_value: String? = parent_obj?.getFieldForCode(code)?["value"] as? NSString

注意:如果您在可选绑定中使用它(看起来像您想要的那样),请不要忘记删除?fromstored_value的类型声明:

if let stored_value: String = parent_obj?.getFieldForCode(code)?["value"] as? NSString {
    /* ... */
}
于 2014-09-26T04:33:33.900 回答