对成员下标的模糊引用

时间:2017-02-02 11:27:41

标签: swift3

我正在将我的代码更新为swift3.0,但对成员的态度不明确?我可能做错了什么。这是我遇到错误的方法。

 open class func parseJsonTenantList(_ list: [NSDictionary]?, strElementName: String, attrName1: String, attrNameValue2: String) -> [TenantRegister]
{
    var renantList: [TenantRegister] = []
    var key: String?
    if let dict : [NSDictionary] = list {
        var value: String?
        for i in 0..<dict.count {
            ///  if attribute name doesn't match then it returns nil
            if  let s1: AnyObject = dict[i].value(forKey: attrName1)
            {
                key = s1 as? String
            }
            if  let s2: AnyObject = dict[i].value(forKey: attrNameValue2)
            {
                value = s2 as? String
            }
            if (!(String.stringIsNilOrEmpty(value) && String.stringIsNilOrEmpty(key)))
            {
                let t: TenantRegister = TenantRegister()
                t.name = key
                t.tenantId = Guid(value!)
                renantList.append(t)
            }
        }
    }



    return renantList
}

1 个答案:

答案 0 :(得分:1)

问题是您正在使用NSDictionary来解决您的问题,只需将列表转换为Swift的原生类型[[String:Any]],然后使用下标而不是value(forKey:)

if let dict = list as? [[String:Any]] {
    var value: String?
    for i in 0..<dict.count {
        ///  if attribute name doesn't match then it returns nil
        if  let s1 = dict[i][attrName1] as? String
        {
            key = s1
        }
        if  let s2 = dict[i][attrNameValue2] as? String
        {
            value = s2
        }
        if (!(String.stringIsNilOrEmpty(value) && String.stringIsNilOrEmpty(key)))
        {
            let t: TenantRegister = TenantRegister()
            t.name = key
            t.tenantId = Guid(value!)
            renantList.append(t)
        }
    }
}

在Swift中使用本机类型字典[:]和数组[]而不是NSDictionaryNSArray来克服此类问题。