gpt4 book ai didi

swift 、Firebase : `setValue` giving error "AnyObject cannot be used with Dictionary Literal"

转载 作者:行者123 更新时间:2023-11-30 13:05:28 24 4
gpt4 key购买 nike

我遇到错误 Contextual type AnyObject cannot be used within dictionary literal在那个函数中addPet在那里,同时尝试使用 newPet 填充数据库字典中的参数成分。

import Foundation
import Firebase

struct Pet {
var name:String?
var type:String?
var age:Int?
var feedingList:[String]
var walkingList:[String]
}

struct User {
var currentId:String?
var numberOfPets:Int?
var pets:[Pet]

}

class petBrain {

var reff = FIRDatabaseReference()
var currentUser:User = User(currentId: "",numberOfPets: 0,pets: [])

init(){
self.reff = FIRDatabase.database().reference()
}

func setUserId(cId:String?){
self.currentUser.currentId = cId
}

func addPet(newPet:Pet) {
self.reff.child("pets").childByAutoId().setValue(["name":newPet.name, "type":newPet.type, "age":newPet.age, "fList":newPet.feedingList, "wList":newPet.walkingList])
}


}

我已经在其他 viewController 中完成了此操作,对于用户来说也是如此,并且它在字典形状中工作正常(不会产生错误)

    let em = emailTextField.text!
let us = usernameTextField.text!

...

else {
print("User created! Loging in.")
self.login()
// adding user to DB of users
self.ref.child("users").child(user!.uid).setValue(["email":em, "username":us])
}

我在宠物案中做错了什么?可能是由于结构或结构元素类型所致?这两个结构体定义明确吗?

最佳答案

    如果该值将来可能变为 nil,则使用
  • ?
  • ! 如果它确实不应该在将来变成 nil,则使用它,但它最初需要为零。

问题是 Swift 是一种严格类型语言,如果你声明一个变量你就是在说它是 nil 类型。所以字典无法判断它将存储什么类型的值......

var myVar:字符串?//看myVar,你和你的类型现在完全nil

var myVar:字符串!//看myVar,你的值现在是nil,但你的类型肯定是String

只需将您的代码更改为:-

     struct Pet {
var name:String!
var type:String!
var age:Int!
var feedingList:[String]
var walkingList:[String]
}

struct User {
var currentId:String?
var numberOfPets:Int?
var pets:[Pet]

}

class petBrain {

var reff = FIRDatabaseReference()
var currentUser:User = User(currentId: "",numberOfPets: 0,pets: [])

init(){
self.reff = FIRDatabase.database().reference()
}

func setUserId(cId:String?){
self.currentUser.currentId = cId
}

func addPet(newPet:Pet) {

let dict = ["name":newPet.name, "type":newPet.type, "age":newPet.age, "fList":newPet.feedingList, "wList":newPet.walkingList]

self.reff.child("pets").childByAutoId().setValue(dict)
}


}

关于 swift 、Firebase : `setValue` giving error "AnyObject cannot be used with Dictionary Literal",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com