如何在另一个函数中访问我的数组对象,即来自 arr 和电子邮件的数组对象。到目前为止,当我调用 auth.auth() 函数时,我只能访问 else 语句内的数组对象。我想知道如何才能做到这一点。
let store = CNContactStore()
store.requestAccess(for: .contacts) { (granted, err) in
if let err = err{
print(err.localizedDescription)
return
}
if granted{
print("Access granted")
let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey]
let req = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
do {
try store.enumerateContacts(with: req) { (contact, stop) in
print(contact.emailAddresses.first?.value as Any)
if let em = contact.emailAddresses.first?.value{
//print("cool")
Auth.auth().fetchProviders(forEmail: em as String, completion: {
(providers, error) in
if error != nil {
print("wierd")
}else{
if providers == nil{
print("No active account")
}else{
self.emails.append(em as String)
self.arr.append(contact.givenName + " " + contact.familyName)
print("Active Account")
print(self.arr)
print(self.emails)
}
}
})
}else{
//print("wow")
}
}
}catch let err{
print(err.localizedDescription)
}
}else{
print("Access denied")
}
}
print("Arr")
print(self.arr)
print(self.emails)
print("Emails")
我想知道如何在另一个函数中访问“arr”和“emails”中的数组元素,因为我的最终目标是将数组信息放在 tableView 中。
数据从 Firebase 异步加载。虽然您可以将其存储在可以从任何地方访问的变量中,但时间很重要。
在您的代码中,当print(self.arr)
运行,则self.arr.append(...)
还没跑。通过在这些行上放置断点并在调试器中运行代码,或者通过放置一些日志记录代码并检查其输出,您可以最轻松地看到这一点。
因此,所有需要数据库数据的代码都需要位于完成处理程序内或从那里调用。
有关此问题的更多信息以及解决方案示例,请参阅:
-
代码未完成该功能,正在中途结束执行,这又包含更多链接
- 使用 Firebase 编写异步代码
-
为什么我的从数据库提取信息的函数不起作用?,其中还有更多链接
-
在加载数据之前完成所有异步请求?,使用调度组
- 异步 Swift 调用数组
- 使用完成块之外的变量
- 等待两个异步完成函数完成,然后再执行下一行代码
- 在加载数据之前完成所有异步请求?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)