当我年轻的时候,我做了一个应用程序,我现在试图修复,然后改进,但我有几个问题转换Swift2到Swift5,应用程序不会编译
问题1:无法将“(NSError)->()"类型的值转换为预期的参数类型”((错误)->Void)?“
参考这两行代码:
}) { (error:NSError) in
print(error.localizedDescription)
问题2:类型Any的值没有下标
参照这些行:
key = snapshot.key
itemRef = snapshot.ref
if let shareContent = snapshot.value!["content"] as? [[String:Any]] {
content = shareContent
}
else{
content = ""
}
if let shareUser = snapshot.value!["addedByUser"] as? [[String:Any]] {
addedByUser = shareUser
}else{
content = ""
问题3:表达的类型不明确,没有更多的上下文
FIRAuth.auth()?.signInWithEmail("", password: "", completion: { (user:FIRUser?, error:NSError?) in
if error == nil {
print(user?.email)
如果有人能帮上忙,我会很感激的
问题1)和3):不要注释类型,在Swift3+中,错误已变成符合error
的类型
}) { error in
print(error.localizedDescription)
关于3)在Firebase文档中寻找合适的类型,它不再是(firuser?,nserror?)
了。
问题2):在Swift3+中,编译器必须知道任何下标对象的静态类型。如果value
预期是一个字典,则必须有条件地向下转换它
if let sharedValue = snapshot.value as? [String:Any],
let shareContent = sharedValue["content"] as? [[String:Any]] {
content = shareContent
}