[英]Passing a value at indexPath in collectionView
我正在嘗試將 indexpath 中的值傳遞給下一個視圖 controller 但我不確定如何做到這一點。
var imageStore = [Data]()
var imageStoreReference = [(resultResponse, Data)]()
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let DestVC = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
let filtered = imageStoreReference.filter({imageStore.contains($0.1)}).first
DestVC.createdAt = filtered?.0.createdAt
DestVC.Imagedescription = filtered?.0.description
DestVC.instagram = filtered?.0.user.instagram
DestVC.twitter = filtered?.0.user.twitter
DestVC.portfolio = filtered?.0.user.portfolio
DestVC.fullImage = filtered?.0.urls.regular
DestVC.userProfileImage = filtered?.0.user.profileImageUrl.regular
}
這里是 resultResponse,它在 imageStoreReference 的元組中被引用。
struct resultResponse: Codable {
let createdAt: String
let description: String?
let urls: urlResponse
let user: userResponse
}
struct urlResponse: Codable {
let regular: String
let small: String
}
struct userResponse: Codable {
let instagram: String?
let twitter: String?
let name:String?
let portfolio: String?
let profileImageUrl: imageSize
enum CodingKeys: String, CodingKey {
case instagram = "instagram_username"
case twitter = "twitter_username"
case profileImageUrl = "profile_image"
case name
case portfolio = "portfolio_url"
}
}
struct imageSize: Codable {
let regular: String?
}
您應該在 DestVC 中創建一個類型為“resultResponse”的變量。
例子:
class DestVC: UIViewController {
var filered: resultResponse?
}
在 CollectionView 中,您只需要傳遞 filtererd 變量。 它使您的代碼干凈。 你應該使用“if let...”來確保你的應用程序在數據為零時不會崩潰
例子:
var imageStore = [Data]()
var imageStoreReference = [(String, Data)]()
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let DestVC = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
if let index = imageStoreReference.firstIndex(where: { (image) -> Bool in
imageStore.contains(image.1)
})
let filtered = imageStoreReference[index]
DestVC.filtered = filtered
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.