首页 > 解决方案 > 处理完成后功能未停止

问题描述

我创建了一个基本的 Google Places 应用程序,让用户可以登记到某个位置。当用户尝试签到时,我会遍历可能地点列表,以验证用户是否确实在应用程序中的位置。但是,当我在确认位置正确后尝试退出循环时,我的功能仍然会进入我的“其他”情况(一条错误消息,要求用户请检查到正确的位置)。

在 viewWillAppear 中调用以下函数:

func checkIn(handleComplete:@escaping (()->())){

        guard let currentUserID = User.current?.key else {return}

        // Specify the place data types to return.
        let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
            UInt(GMSPlaceField.placeID.rawValue))!
        placesClient.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: fields, callback: {
            (placeLikelihoodList: Array<GMSPlaceLikelihood>?, error: Error?) in
            if let error = error {
                print("An error occurred: \(error.localizedDescription)")
                return
            }

            if let placeLikelihoodList = placeLikelihoodList {
                for likelihood in placeLikelihoodList {
                    let place = likelihood.place
                    if likelihood.likelihood >= 0.75 && place.placeID! == self.hangoutID {
                        let place = likelihood.place
                        print("Current Place name \(String(describing: place.name!)) at likelihood \(likelihood.likelihood)")
                        print("Current PlaceID \(String(describing: place.placeID!))")

                        self.delta = 0.0

                        // update checkin
                        DispatchQueue.main.async {
                            let hangoutRef = self.db.collection("users").document(currentUserID).collection("hangout").document(self.hangoutID).updateData([
                                "lastCheckin": Date()
                            ]) { err in
                                if let err = err {
                                    print("Error updating document: \(err)")
                                } else {
                                    print("Document successfully updated")
                                }
                            }
                        }

                        handleComplete()
                    }
                }
                self.presentDismissableAlert(title: "", message: "Please check in to the hangout to join this chat", button: "OK", dismissed: { (UIAlertAction) in
                    self.performSegue(withIdentifier: "unwindSegueToChats", sender: self)
                })
            }
        })
    }

如果满足正确的条件,代码将到达 handleComplete() 行,但它仍会执行下面的dismissableAlert 并将用户赶出房间。如何修复流程,以便应用程序将在可能的地点列表中循环,如果满足正确的条件,则停止 handleComplete 上的功能,否则如果不满足正确的条件(用户不是在正确的地方)?

谢谢

标签: swiftgoogle-places-api

解决方案


推荐阅读