迁移到Swift 3.0时出错

时间:2017-04-13 14:30:05

标签: swift swift3

迁移到Swift 3时出错。下面是出现错误的代码。

func getProfileFieldValue(_ formFields:NSMutableArray,keyValue:String) -> String {
    for key in formFields{
        if keyValue == key["name"] as! String{
            return key["value"] as! String
        }

    }
    return ""
}

enter image description here

请提前帮助和谢谢。

2 个答案:

答案 0 :(得分:5)

NSMutableArray不提供任何类型信息,使用原生Swift数组

func getProfileFieldValue(_ formFields:[[String:Any]], keyValue: String) -> String {
    for key in formFields {
        if let value = key["name"] as? String, value == keyValue {
            return key["value"] as! String
        }

    }
    return ""
}

或者词典仅包含String

func getProfileFieldValue(_ formFields:[[String:String]], keyValue: String) -> String {
    for key in formFields {
        if let value = key["name"], value == keyValue {
            return key["value"]!
        }

    }
    return ""
}

或者 swiftier

func getProfileFieldValue(_ formFields:[[String:Any]], keyValue: String) -> String {
    if let profileField = formFields.first(where { $0["name"] as? String == keyValue }) {
        return profileField["value"] as! String
    }
    return ""
}

最后防水 - 永不崩溃版本:

func getProfileFieldValue(_ formFields:[[String:Any]], keyValue: String) -> String {
    guard let profileField = formFields.first(where: { $0["name"] as? String == keyValue }),
        let value = profileField["value"] as? String else { return "" }
    return value
}

答案 1 :(得分:2)

NSMutableArray不提供类型信息,因此您需要在for循环之前强制转换数组

let array = NSMutableArray(array: [1, 2, 3, 4, 5])
let keyValue = 3

for item in array as! [Int]
{
    if keyValue == item
    {}
}