2017-09-19 10 views
0

申し訳ありませんが、この問題は以前に尋ねられましたが解決策を見つけることができませんでしたので、助けてくれる他の人がいるかどうか確認しました。2つのクラス配列をマージし、コレクションビューの日付に応じて追加します

2つのクラスの配列をコレクションビューでマージするにはどうすればよいですか?私は2つの配列を表示することができましたが、どうすればそれらを相互に結びつけ、postDateに従って追加することができますか?

以下、私はphotoPosts配列とvideoPosts配列を持っていますが、私は現在以下のメソッドを使用しています。しかし、これは1つの配列を別のアレイにしか表示しません。事前

var photoPosts = [photoPost]() 
var videoPosts = [videoPost]() 

func retrieveData(){ 
let ref = Database.database().reference().child("videoPost").child(uid) 
     ref.observe(.childAdded, with: { (snapshot) in 
      let dictionary = videoPost(snapshot: snapshot) 
      self.videoPosts.append(dictionary) 
      self.videoPosts.sort(by: { (p1, p2) -> Bool in 
       return p1.postDate?.compare(p2.postDate!) == .orderedDescending 
       }) 
}) 
let ref = Database.database().reference().child("photoPost").child(uid) 
     ref.observe(.childAdded, with: { (snapshot) in 
      let dictionary = photoPost(snapshot: snapshot) 
      self. photoPosts.append(dictionary) 
       self.posts.sort(by: { (p1, p2) -> Bool in 
        return p1.postDate?.compare(p2.postDate!) == .orderedDescending 
       }) 
}) 
self.newsfeedCollectionView?.reloadData() 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
return videoPosts.count + photoPosts.count 
} 
     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {   
       let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! newsfeedCollectionViewCell 
      if indexPath.item < photoPosts.count { 
       cell. photoPost = photoPosts[indexPath.item] 
       } else { 
       cell.videoPost = videoPosts[indexPath.item-photoPosts.count] 
       } 
       return cell 
       } 

答えて

0

のおかげでは、以下をご確認ください:返信用

var combinedArray = NSMutableArray() 

func retrieveData(){ 
    let ref = Database.database().reference().child("videoPost").child(uid) 
    ref.observe(.childAdded, with: { (snapshot) in 
     let dictionary = videoPost(snapshot: snapshot) 
     combinedArray.add(dictionary) 
    }) 

    let ref = Database.database().reference().child("photoPost").child(uid) 
    ref.observe(.childAdded, with: { (snapshot) in 
     let dictionary = photoPost(snapshot: snapshot) 
     combinedArray.add(dictionary) 
    }) 

    self.combinedArray.sort(by: { (p1, p2) -> Bool in 
     var postDate1: Date? 
     var postDate2: Date? 
     if let photoPost1 = p1 as? photoPost { 
      postDate1 = photoPost1.postDate 
     } else if let videoPost1 = p1 as? videoPost { 
      postDate1 = videoPost1.postDate 
     } 

     if let photoPost2 = p2 as? photoPost { 
      postDate2 = photoPost2.postDate 
     } else if let videoPost2 = p2 as? videoPost { 
      postDate2 = videoPost2.postDate 
     } 

     return postDate1!.compare(postDate2!) == .orderedDescending 
    }) 
    self.newsfeedCollectionView?.reloadData() 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return combinedArray.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! newsfeedCollectionViewCell 

    if let photoItem = combinedArray[indexPath.item] as? photoPost { 
     cell.photoPost = photoItem 
    } else { 
     cell.videoPost = combinedArray[indexPath.item] as videoPost 
    } 
    return cell 
} 
+0

感謝を。 Emptyコレクションリテラルには、 '' var combinedArray = [] '行の明示的な型が必要です。 –

+0

' 'NSArray'として' 'var combinedArray = [] 'を試しました。しかし、私はまだエラーが表示されます –

+0

エラー:空のコレクションリテラルには明示的な型が必要です –

関連する問題