提问者:小点点

Swift新手,手动将Swift 2转换为Swift 5有困难


当我年轻的时候,我做了一个应用程序,我现在试图修复,然后改进,但我有几个问题转换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个答案

匿名用户

问题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
    
}