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

问题描述 投票:0回答:1

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

如果有人可以提供任何帮助,我将非常感激

ios swift swift2 swift5
1个回答
1
投票

问题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
    
}
© www.soinside.com 2019 - 2024. All rights reserved.