迁移到Swift 3.0时出错

Aka*_*ash -1 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 ""
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请提前帮助和感谢.

vad*_*ian 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 ""
}
Run Code Online (Sandbox Code Playgroud)

或者如果词典仅包含String

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

    }
    return ""
}
Run Code Online (Sandbox Code Playgroud)

或者仍然更加迅速

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 ""
}
Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)