swift2 Swift新手,手动将Swift 2转换为Swift 5时遇到问题

az31mfrm  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(134)

我年轻的时候曾经做过一些小事情,我构建了一个应用程序,我目前正在尝试修复并改进它,但我在将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)

如果有人能帮上忙,我真的会非常感激

db2dz4w8

db2dz4w81#

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

}

相关问题