使用NSDictionary进行Swift可选链接

时间:2014-09-19 08:59:01

标签: 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

并收到错误:

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 {

有任何建议吗?

1 个答案:

答案 0 :(得分:2)

您无法将其直接投放到String,因为您是从NSDictionary中提取的,并且如错误所述,String不符合{{1} }}。但是,NSCopying桥接到StringNSString 符合NSString。所以,通过一点点演员/桥接技巧,你可以让它像这样工作:

NSCopying

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

stored_value