zakiyamaaaaa / excellent-project

0 stars 0 forks source link

Error @prototype MainFunction.swift #10

Closed zakiyamaaaaa closed 7 years ago

zakiyamaaaaa commented 7 years ago

ハマりました。 ここでやろうとしてること カードをスワイプ→右スワイプ(liked)or 左スワイプ(not like)かを判定→右スワイプして、スワイプした相手も自分をlikeしていたら、マッチングイベント

ハマった箇所 スワイプした相手の"liked"のvalueを取得できない。※playgroundで同じようなデータ型の分解やったが、そこでは成功した。

  1. カード(相手のユーザー)がスワイプされたときのイベント
  2. userDataにはあらかじめユーザー情報が[[String:Any]]型で格納されており、numberofPageにカード番号が入っていて、userData[numberOfPage]から、スワイプされたユーザー(カード)の情報が取得できる。
  3. まず、swipeDataという定数にスワイプされたユーザー情報を入力
  4. swipedDataLiked に "liked" keyを格納する。※liked には、配列でlikedした相手のidが入っている
  5. 右スワイプ(liked)したユーザーの"liked"のバリューに自分のidが含まれてるかどうかをcontainsメソッドでbool判定
  6. trueであれば、マッチングビューへ遷移AND messageableUserItemという、メッセージが可能なユーザーリストに追加する。
func swipeDirectionHandler(numberOfPage:Int,swipeDirection:direction){
        let swipedData = userData![numberOfPage]

        //↓ここがどうにも分解できずに止まってる。

//        let swipedDataLiked = swipedData["liked"] as! [String]

        print("526:\(swipedData)")
        //encounter
        //相手と自分のdataをpostして更新
        //uuid,encounterd,liked,matched

        switch swipeDirection {
        case .right:
            print("right")
            print("535\(myUUID)")

//            if (swipedDataLiked as AnyObject).contains(myUUID){
//                //matching Event
//                print("contains")
//                let str = userData![numberOfOrder]["uuid"] as! String
//                messageableUserItem.append(["uuid" : str])
//                matchFlag = true
//                userMessageTableView.reloadData()
//                performSegue(withIdentifier: "matchSegue", sender: nil)
//            }
        case .left:
            print("left")
        default:
            print("default")
        }

        self.postUserSwipe(numberOfPage: numberOfPage, swipeDirection: swipeDirection)

    }
shinji19 commented 7 years ago

https://github.com/zakiyamaaaaa/excellent-project/blob/master/swift/prototype02/prototype02/SearchLocationViewController.swift#L96

                self.setNearUser(data: "[{\"uuid\":\"aa\", \"username\":\"bb\", \"distance\":5, \"encounterd\":\"\", \"liked\":[\"aa\"]},{\"uuid\":\"aa\", \"username\":\"bb\", \"distance\":5, \"encounterd\":\"\", \"liked\":[\"aa\"]},{\"uuid\":\"aa\", \"username\":\"bb\", \"distance\":5, \"encounterd\":\"\", \"liked\":[\"aa\"]}]".data(using: .utf8)!)

としたら取れたんでphpのレスポンスがおかしいかもしれない

zakiyamaaaaa commented 7 years ago

どうやら返ってきたデータ型がStringになっている模様。 ["hoge01","hoge02"]みたいな感じなので、"で区切って取れればいいのかな・・・

zakiyamaaaaa commented 7 years ago

解決しました。 どうやらサーバー側で返すときに、json型がそのまま変数にいれてたのが、ダメだった模様 DBからとってくるときに、json型のフィールドはJson decodeして取り込むとうまくいく。