2017-04-13 104 views
-1

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

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

请在此先感谢帮助和。

回答

5

NSMutableArray不提供任何类型的信息,使用本地夫特阵列

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 
} 
+0

感谢。 它现在工作正常,第一个解决方案。 – Akash

+0

如果可能,请使用第二种解决方案。强类型系统鼓励开发人员尽可能地使用类型。 – vadian

+0

为什么不返回“key [”value“]!”的值“而不是”?删除一些武力解开总是一个不错的选择:) –

2

NSMutableArray不提供类型信息,所以你需要先投数组的for循环

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

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

更好的解决方案是完全避免使用“NSMutableArray”。 – rmaddy

+0

@rmaddy同意 - 尽可能使用现代快速课程,尽可能 – XmasRights