Ios 宽度、高度:-1,默认图像:“默认标记”) infoWindow.name.text=info[1] infoWindow.status.text=info[2] infoWindow.speed.text=info[3] infoWindow.LastUpdateOn.text=Double(信息[4])?.getDateStringFromTimeStamp() infoWindow.interval.text=info[5] 返回信息窗口 } }

Ios 宽度、高度:-1,默认图像:“默认标记”) infoWindow.name.text=info[1] infoWindow.status.text=info[2] infoWindow.speed.text=info[3] infoWindow.LastUpdateOn.text=Double(信息[4])?.getDateStringFromTimeStamp() infoWindow.interval.text=info[5] 返回信息窗口 } },ios,google-maps,swift3,delegates,messaging,Ios,Google Maps,Swift3,Delegates,Messaging,我真的非常感谢任何关于这方面的帮助。谢谢我已通过将MessagingProcessor声明为全局并在视图控制器和类中使用它解决了此问题 let messsagingProcessor: MesssagingProcessor = MesssagingProcessor() 以前,我在视图控制器类和客户机类中声明和使用不同的对象 我希望它能帮助别人。无论如何,谢谢你有什么回应吗?? channel.subscribe { message in print(

我真的非常感谢任何关于这方面的帮助。谢谢

我已通过将MessagingProcessor声明为全局并在视图控制器和类中使用它解决了此问题

let messsagingProcessor: MesssagingProcessor = MesssagingProcessor()
以前,我在视图控制器类和客户机类中声明和使用不同的对象


我希望它能帮助别人。无论如何,谢谢你

有什么回应吗??
channel.subscribe { message in
                    print(message.name ?? Constant.NIL_DEFAULT_TEXT)
                    print(message.data ?? Constant.NIL_DEFAULT_TEXT)
                    self.messageProcessor.process(message: message)
                }
                return true
protocol MesssagingProcessorDelegate {
    func messageReceived(msg: MessageMO)
}

class MesssagingProcessor {

    //MAR: Properties
    var delegate: MesssagingProcessorDelegate?
    var info = ""

    //MARK: Constructor
    init() {
        info = "I am set"
    }

    //MARK: Functions
    func process(message: <MessageTypeHere>) {
        let msg = MessageMO(dataString: message.data as! String, colString: Constant.EP.C_MSG)
        if MessagingHelper.validMessage(msg: msg) {
            if msg.type == Constant.TYPE_MSG_LOC {
                if msg.location != nil {
                    delegate?.messageReceived(msg: msg)
                }
                else {
                    print("No location found in Location Message. Message: \(String(describing: message.data))")
                }
            }
        }
    }

}
import UIKit
import GoogleMaps
import UserNotifications

class FirstViewController: UIViewController, MesssagingProcessorDelegate {


    //MARK: Properties

    let messsagingProcessor: MesssagingProcessor = MesssagingProcessor()

    var bounds = GMSCoordinateBounds()
    var mapView: GMSMapView? = nil

    //MARK: Events
    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton.init(type: .custom)
        button.setImage(UIImage.init(named: "logo"), for: UIControlState.normal)
        button.addTarget(self, action:#selector(showTrackeeOptions), for: UIControlEvents.touchUpInside)
        button.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30) //CGRectMake(0, 0, 30, 30)
        let barButton = UIBarButtonItem.init(customView: button)
        self.navigationItem.leftBarButtonItem = barButton


        let camera = GMSCameraPosition.camera(withLatitude: 53.34624,
                                              longitude: -6.24134, zoom: 6)
        mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        mapView!.isMyLocationEnabled = true
        mapView!.settings.setAllGesturesEnabled(true)
        mapView!.delegate = self
        self.view = mapView!
//
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2DMake(-33.86, 151.20)
        marker.title = "TEST"
        marker.snippet = Generic.toImageURL(name: "_demo_bus.png", category: Constant.TYPE_IMG_MARKER, type: Constant.TYPE_USER) + "^TestTest Test <-> Demo Bus^Available^2.3 km/h^1493729075106^10^0^333"
        marker.map = mapView!

        messsagingProcessor.delegate = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //MARK: Events

    //MARK: MesssagingProcessorDelegate
    func messageReceived(msg: MessageMO) {

        let mk = MarkerMO(msg: msg).add()
        var marker: GMSMarker

        if mk != nil {

            let imgURL = Generic.toImageURL(name: mk!.iconMarker, category: Constant.TYPE_IMG_MARKER, type: Constant.TYPE_USER)
            var sharedInfo = imgURL
            sharedInfo += Constant.SEPARATOR_LIST_ITEM
            sharedInfo += mk!.name! + Constant.SEPARATOR_LIST_ITEM
            sharedInfo += mk!.status + Constant.SEPARATOR_LIST_ITEM
            sharedInfo += mk!.speed + Constant.SEPARATOR_LIST_ITEM
            sharedInfo += String(mk!.time) + Constant.SEPARATOR_LIST_ITEM
            sharedInfo += String(mk!.interval)

            if mk!.gMarker != nil {
                marker = GMSMarker()
            } else {
                marker = mk!.gMarker!
            }

            CATransaction.begin()
            CATransaction.setAnimationDuration(1.0)

            marker.position = CLLocationCoordinate2D(latitude: (mk!.location!.latitude), longitude: (mk!.location!.longitude))
            marker.icon = Generic.toImageByURL(url: imgURL, width: Constant.ICON_DEFAULT_MARKER_WIDTH, height: Constant.ICON_DEFAULT_MARKER_HEIGHT, defaultImage: "defaultmarker")

            marker.title = mk!.name
            marker.snippet = sharedInfo
            marker.map = self.mapView

            CATransaction.commit()

            mk!.updateGMarker(marker: marker)
            self.bounds = self.bounds.includingCoordinate(marker.position)

        }
        else {
            //TODO: Error in marker generation
        }



    }


}

extension FirstViewController: GMSMapViewDelegate {
        //For Info WindowIndow
        func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
            let infoWindow = Bundle.main.loadNibNamed("LocMarkerInfoWindow", owner: self.view, options: nil)!.first! as! LocMarkerInfoWindowController
            print(marker.snippet!)
            let info =  marker.snippet!.components(separatedBy: Constant.SEPARATOR_LIST_ITEM)
            infoWindow.iconMarker.image = Generic.toImageByURL(url: info[0], width: Constant.ICON_INFOWIN_MARKER_WIDTH, height: -1, defaultImage: "defaultmarker")
            infoWindow.name.text = info[1]
            infoWindow.status.text = info[2]
            infoWindow.speed.text = info[3]
            infoWindow.lastUpdatedOn.text = Double(info[4])?.getDateStringFromTimeStamp()
            infoWindow.interval.text = info[5]

            return infoWindow
        }

}
let messsagingProcessor: MesssagingProcessor = MesssagingProcessor()