【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る！【ユーザページ完成編②】

# **目次**
- 前回
- ユーザページを完成させる
- 感想
- 次回

# **前回**
[【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る！【ユーザページ完成編①】](https://qiita.com/umagoro/items/a00ba729e5bb350c4f3c)

# **ユーザページを完成させる**
今回は、ユーザページの完成させる。(UI変更の過程で、多少修正する可能性あり。)
今回やる事は、

① Databaseからユーザネームと一言メッセージを取得し、表示させる。
② Databaseのuser/imagesにあるUIDを取得し、それを使って、画像を取得する。

をやる。

### **① コード** 
今回は、一部修正した部分だけを抜粋した。
元のコードを見たい方は、[こちら](https://qiita.com/umagoro/items/a0094fd1eb74ed542077)。

```swift:ImageViewController.swift
 //ダウンロードURL取得して、Storageからダウンロードする
        //ログイン情報取得
        let user = Auth.auth().currentUser
        if let user = user {
            //usercountからカウントデータを取得
            let usercount = self.ref.child("usercount/count")
            usercount.observe(DataEventType.value, with: { (snapshot) in
                let usercountStr = snapshot.value as? String
                let usercountInt = Int(usercountStr!)
                for u in 1 ... usercountInt! {
                    //user/imagesにあるUIDを取得
                    let userUID = self.ref.child("user/\(u)/UID")
                    userUID.observe(DataEventType.value, with: { (snapshot) in
                        let UIDstr = snapshot.value as? String
                        //ログインしたUIDとuser/imagesにあるUIDが同じ
                        if user.uid == UIDstr! {
                            //ユーザネームと一言メッセージを取得
                            let usernameData = self.ref.child("user/\(u)/username")
                            let usermsgData = self.ref.child("user/\(u)/msg")
                            usernameData.observe(DataEventType.value, with: { (snapshot) in
                                let username = snapshot.value as? String
                                let usernameStr = username!
                                let usernameLabel = UILabel(frame: CGRect(x: (w2 - 300) / 2, y: 100, width: 300, height: 40))
                                usernameLabel.text = "\(usernameStr)"
                                usernameLabel.textColor = .black
                                usernameLabel.textAlignment = .center
                                self.view.addSubview(usernameLabel)
                            })
                            usermsgData.observe(DataEventType.value, with: { (snapshot) in
                                let usermsg = snapshot.value as? String
                                let usermsgStr = usermsg!
                                let usermsgLabel = UILabel(frame: CGRect(x: (w2 - 300) / 2, y: 130, width: 300, height: 60))
                                usermsgLabel.text = "\(usermsgStr)"
                                usermsgLabel.textColor = .black
                                usermsgLabel.textAlignment = .center
                                self.view.addSubview(usermsgLabel)
                            })
                            
                            //imgcountのカウントデータ値の存在確認
                            let imgCount = self.ref.child("imgcount/\(UIDstr!)/count")
                            imgCount.observe(DataEventType.value, with: { (snapshot) in
                                let Count = snapshot.value
                                var Countstr = Count as? String
                                if Countstr == nil {
                                    //存在しない場合、新規データ作成(countは0にする)
                                    self.ref.child("imgcount").child(self.userID!).setValue(["count": "0"])
                                    Countstr = "0"
                                } else {
                                    //UIScrollView初期設定
                                    let scView = UIScrollView(frame: CGRect(x: 0 , y: h2 - (h2 - 200), width: w2, height: h2 - 200))
                                    scView.isPagingEnabled = false
                                    scView.backgroundColor = .white
                                    //データから呼んだ値を、各変数にセットする
                                    var CountInt = Int(Countstr!) //数値化
                                    var CountValue = CountInt!   //強制アンラップ
                                    var CountUp = CountValue + 1  //カウントアップ
                                    //カウンタの初期設定
                                    let ud = UserDefaults.standard
                                    ud.set(CountUp, forKey: "count")
                                    //カウントダウン値
                                    var CountDown = CountValue
                                    //画像表示用UIImageView
                                    var ImgArray = [UIImageView](repeating: UIImageView(), count: CountValue + 1)
                                    
                                    //ダウンロードURLの存在確認
                                    if CountValue != 0 {
                                        for i in 1 ... CountValue {
                                            //ダウンロードURL取得
                                            let imageURL = self.ref.child("images/\(UIDstr!)/\(CountDown)/profile")
                                            ImgArray[i] = UIImageView(frame: CGRect(x: 0, y: CGFloat(newY), width: w2, height: w2))
                                            print(newY)
                                            print(imageURL)
                                            imageURL.observe(DataEventType.value, with: { (snapshot) in
                                                let url = snapshot.value as? String
                                                //ダウンロードURLを取得し、ImageViewに反映
                                                let strURL = URL(string: url!)
                                                //画像を配列に保存
                                                ImgArray[i].sd_setImage(with: strURL)
                                                scView.addSubview(ImgArray[i])
                                            })
                                            
                                            //高さを延ばす
                                            newY += Int(w2 + 50)
                                            scView.contentSize = CGSize(width: 0, height: newY)
                                            //カウントダウン
                                            CountDown -= 1
                                        }
                                        
                                        //処理後、初期値に戻す
                                        newY = 100
                                    } else {
                                        //アップロードボタン
                                        let add = UIButton(frame: CGRect(x: (w2 - 150) / 2, y: 150, width: 150, height: 30))
                                        //アップロードボタン設定
                                        add.backgroundColor = .red
                                        add.addTarget(self, action: #selector(ImageViewController.Imageadd(_:)), for: .touchUpInside)
                                        add.setTitle("アップロード", for: UIControlState())
                                        scView.addSubview(add)
                                    }
                                    
                                    self.view.addSubview(scView)
                                    
                                }
                                
                                //imagesのデータの存在確認
                                let newUser = self.ref.child("images/\(UIDstr!)/\(Countstr!)/profile")
                                newUser.observe(DataEventType.value, with: { (snapshot) in
                                    let profile = snapshot.value as? String
                                    if profile == nil  {
                                        //データ値がない場合、新規データを作成
                                        self.ref = Database.database().reference()
                                        self.ref.child("images").updateChildValues(["\(self.userID!)": "userID"])
                                        print("新規ユーザー")
                                        
                                    } else {
                                        print("既存")
                                    }
                                    
                                })
                                
                            })
                            print("ログインID")
                        } else {
                            print("不一致")
                        }
                        
                    })
                }
            })
        }
```

### **② 完成品**
**・既に写真を投稿している場合**
<img width="409" alt="スクリーンショット 2018-03-09 0.20.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/154610/5a34ed0b-47dc-bb3c-8283-e1adb32fdf3d.png">



**・まだ投稿していない場合**
<img width="408" alt="スクリーンショット 2018-03-09 0.23.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/154610/a19de336-7196-2b7c-3b53-1b368ae09275.png">


# **感想**
今回の修正で、前回まで出来ていた画像の追加アップロードができなくなったので、
次回は、アップロードページを作りたいですね。

# **次回**
[【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る！【アップロードページ編】](https://qiita.com/umagoro/items/12beef87e434da103fd5)