Swift 新手,无法手动将 swift 2 转换为 swift 5

问题描述

我年轻的时候经常搞砸,我构建了一个应用程序,我目前正在尝试修复并改进该应用程序,但是我在将 swift 2 转换为 swift 5 时遇到了一些问题,并且该应用程序不会成功编译

问题 1: 无法将 '(NSError) -> ()' 类型的值转换为预期的参数类型 '((Error) -> 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):不要注释类型,在 Swift 3+ 中,错误已成为符合 Error 的类型

}) { error in
    print(error.localizedDescription)

关于 3) 在 Firebase 文档中查找正确的类型,它不再是 (FIRUser?,NSError?)

问题 2):在 Swift 3+ 中,编译器必须知道任何下标对象的静态类型。如果 value 应该是字典,你必须有条件地向下转换它

if let sharedValue = snapshot.value as? [String:Any],let shareContent = sharedValue["content"] as? [[String:Any]] {
    content = shareContent
    
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...