我正在尝试创建一个阅读列表应用程序,并希望在用户uid下嵌套阅读列表,因此我可以在登录时向他们显示列表。我工作的代码是:
var items: [ReadingItem] = []
let usersRef = FIRDatabase.database().reference(withPath: "users")
let ref = FIRDatabase.database().reference(withPath: "reading-list")
var user: User!
var userCountBarButtonItem: UIBarButtonItem!
然而,这给了我数据,用户和阅读列表的节点。我尝试将代码更改为以下部分,但它给出了一个错误:“无法在属性初始化程序中使用实例成员;属性初始化程序在'self'可用之前运行”
var items: [ReadingItem] = []
let usersRef = FIRDatabase.database().reference(withPath: "users")
let ref = usersRef.child(self.user.uid)(withPath: "reading-list")
var user: User!
var userCountBarButtonItem: UIBarButtonItem!
所以最后我尝试将其更改为此,但它给出了一个错误:“无法在属性初始化程序中使用实例成员;属性初始化程序在'self'可用之前运行”
var items: [ReadingItem] = []
let usersRef = FIRDatabase.database().reference(withPath: "users")
let ref = self.usersRef.child(self.user.uid)(withPath: "reading-list")
var user: User!
var userCountBarButtonItem: UIBarButtonItem!
对Swift来说显然是非常新的,但是对此的任何帮助都会非常感激!
答案 0 :(得分:0)
由于我不知道您正在使用的上下文,我假设您尝试在UIViewController
中调用它。如果您在UIViewController
中执行此操作,则可能需要尝试执行以下操作。
声明你的变量:
var items: [ReadingItem] = []
var usersRef: DatabaseReference?
var ref: DatabaseReference?
var user: User!
var userCountBarButtonItem: UIBarButtonItem!
然后在viewDidLoad()
中,执行此操作:
override func viewDidLoad() {
self.usersRef = Database.database().reference(withPath: "users")
self.ref = self.usersRef?.child(self.user.uid).child(withPath: "reading-list")
}
答案 1 :(得分:0)
假设您希望能够在用户节点中创建用户,并且每个用户都将拥有一个包含该用户阅读列表的子节点。
结构看起来像这样
let readingListDict = [
"item_0": "Discovery",
"item_1": "Astronomy",
"item_2": "Popular Mechanics"
]
let userDict = [
"name": "Larry",
"reading_list": readingListDict,
"age": "37"
] as [String : Any]
let usersNode = self.ref.child("users")
let thisUser = usersNode.child("uid_0")
thisUser.setValue(userDict)
要创建此结构,这是执行此操作的一种方法:
let thisUserRef = self.ref.child("users").child("uid_0")
thisUserRef.observeSingleEvent(of: .value, with: { (snapshot) in
if let userDict = snapshot.value as? [String: Any] {
let name = userDict["name"] as! String
let age = userDict["age"] as! String
let readingList = userDict["reading_list"] as! [String: Any]
print("name: \(name) age: \(age)")
print(" list: \(readingList)")
}
})
这个读取节点,我们使用像这样的观察者
name: Larry age: 37
list: ["item_1": Astronomy, "item_0": Discovery, "item_2": Popular Mechanics]
,输出
let thisUserReadingListNode = self.ref.child("users").child("uid_0").child("reading_list")
thisUserReadingListNode.setValue(readingListDict)
上面的代码只是一种方式,非常详细,并且有很多错误检查。
要进一步扩展,如果你知道用户uid和那个用户节点已经存在,你可以直接写入阅读列表子节点
>>> df['54513_answer'] = df['string_col'].apply(lambda x: x[-1] if len(x)>6 and x[-7:-1]=='541513' else 'Null')
>>> df
string_col 54513_answer
0 541511N~541512N~541513N N
1 332710Y~332999Y Null
2 Null Null
3 238210Y~423690Y~517911Y~517919Y~532490Y~561421... Null