提问人:rwb977 提问时间:4/15/2021 最后编辑:vadianrwb977 更新时间:4/15/2021 访问量:55
Swift 新手,手动将 swift 2 转换为 swift 5 时遇到问题
New To Swift, Having Trouble Converting swift 2 to swift 5 manually
问:
我年轻的时候曾经搞砸过一点,我构建了一个应用程序,我目前正在尝试修复然后改进,但我在将 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赞
vadian
4/15/2021
#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
}
-1赞
Clean Coder
12/19/2023
#2
当然!以下是针对您的问题的简明和更新示例:
问题 1:
}) { error in
if let error = error as NSError? {
print(error.localizedDescription)
}
}
问题 2:
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 {
addedByUser = ""
}
问题 3:
FIRAuth.auth()?.signIn(withEmail: "", password: "") { user, error in
if error == nil {
print(user?.email)
}
}
如果您使用的是较新版本的 Firebase SDK,请记得替换为。FIRUser
User
评论