ios - 如何从另一个类访问一个类中的值?斯威夫特 4
问题描述
我有一个应用程序,当用户cell
从TableView
代表一组图像中点击 a 时,他会被带到另一个 tableView,其中应该显示该组中的所有图像。但是我不确定如何做到这一点。
我目前已经在开始时提取了进行引用和获取所有数据所需的信息,这些数据位于对象数组中。但是如何从另一个类访问这些值?
数据模型:
struct UserImage {
var userID: String
var image: UIImage
var postNum: String
}
我正在创建一个数组,如下所示,在P1TableVC
:
let arrayOfUserImageData = [UserImage]()
检索和存储数据的函数如下所示:
func fetchAllUserFristImage() {
print("Description: calling of fetchAllUserFristImage()")
Database.database().reference().child("Posts").observe(.childAdded, with: {(snapshot) in
if snapshot.value as? [String: AnyObject] != nil {
let user = snapshot.key
print("Description: calling of snapshot.value is not nil ")
self.databaseRef = Database.database().reference()
let usersPostRef2 = self.databaseRef.child("Posts").child(user)
usersPostRef2.observe(.value, with: {(postXSnapshots) in
if let postDictionary2 = postXSnapshots.value as? [String:AnyObject] {
for (p) in postDictionary2 {
if let posts = p.value as? [String:AnyObject] {
print("Description: posts has value of: \(posts)")
//to get back to where i was delete the below for i
for (i) in posts {
if let imageUrlString = i.value as? [String:AnyObject], let postUrl = imageUrlString["image1"] as? String {
print("Description: inside the if let imageUrlString = i.value ")
self.feedArray.append(Post(fetchedImageURL: postUrl))
if let imageUrl = URL(string: postUrl), let imageDataL = try? Data(contentsOf: imageUrl), let image = UIImage(data: imageDataL) {
print("Description: inside the if let imageUrl = URL(string: postUrl)")
print("Description: img url's of posts: \(imageUrl)")
self.tableData.append(UserImage(userID: user, image: image, postNum: p.key))
self.tableView.reloadData()
} else {print("this user had no posts, was nil")}
}
}
}
}
}
})
//below shud stay same
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
})
}
解决方案
或者你可能会使用单例
例如:只需创建类 Model
class Model {
static let sharedInstance = Model()
var tableVC: P1TableVC!
}
然后在 viewDidLoad 中的 VC 中
class P1TableVC: UIViewController {
override func viewDidLoad() {
Model.sharedInstance.tableVC = self
}
}
然后你可以在任何你想要的地方使用你的类
Model.sharedInstance.tableVC.arrayOfUserImageData
或者您可以为所有数据创建变量
class Model {
static let sharedInstance = Model()
var data: [UserImage]()
}
然后使用数据而不是VC
Model.sharedInstance.data
推荐阅读
- python - TypeError:运行我的模型时类型提升无效
- regex - grep 的贪婪行为
- android - AppCompatTextView 内的文本超出范围
- python - 在保存在 Django 模型中之前,有什么方法可以从 ManyToManyField 中获取选定的值
- python - Resample() 为不存在的日期返回不正确的数字
- ssl - Cert-Manager 为 AKS 提供自己的 SSL 证书
- php - 将 PHP 脚本转换为 Unix 可执行文件
- javascript - 在 ngx-editor 中,单击按钮时如何在光标位置插入 html 块
- arrays - 角度循环遍历对象数组
- javascript - 抛出错误:Describe 不是函数。运行 Mocha 测试时出现此错误