Google 地图对 GMSMapViewType 的使用不明确

Google Maps ambiguous use of a GMSMapViewType

我刚刚升级到 Xcode 7.1。当我尝试设置 GMSMapView 的 mapType 时,出现错误 'kGMSTypeNormal' 的不明确使用、'kGMSTypeTerrain' 的不明确使用以及 'kGMSTypeHybrid'.

的不明确使用
@IBOutlet weak var mapView: GMSMapView!

func myfunc() {
      if let myMapType = NSUserDefaults.standardUserDefaults().stringForKey(SettingsTableViewController.History.MapType) {
            switch myMapType {
            case "kGMSTypeNormal":
                mapView.mapType = kGMSTypeNormal
            case "kGMSTypeTerrain":
                mapView.mapType = kGMSTypeTerrain
            case "kGMSTypeHybrid":
                mapView.mapType = kGMSTypeHybrid
            default: break
                mapView.mapType = kGMSTypeNormal
            }
        } else {
            mapView.mapType = kGMSTypeNormal
        }
}

如果您打开 GMSMapViewType,您会看到它定义为枚举。在您的 switch 语句中,您将它与错误的字符串进行比较。您最好将它们与整数进行比较。

kGMSTypeNormal = 1
kGMSTypeSatellite = 2
kGMSTypeTerrain = 3
kGMSTypeHybrid = 4
kGMSTypeNone = 5

我不确定为什么,但是将 "GoogleMaps." 放在所有 kGMSTypes 前面(即 GoogleMaps.kGMSTypeNormal)解决了这个问题。

你需要这样使用

mapView.mapType = GoogleMaps.kGMSTypeSatellite

mapView.mapType = GMSMapViewType(rawValue: 1)!
  • kGMSTypeNormal = 1
  • kGMSTypeSatellite = 2
  • kGMSTypeTerrain = 3
  • kGMSTypeHybrid = 4
  • kGMSType无 = 5

Swift 3中使用如下:

.normal .hybrid .satellite .terrain

这是更新后的版本

import UIKit      
import GoogleMaps

class ViewController: UIViewController, GMSMapViewDelegate {
    var mapView: GMSMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        mapView = GMSMapView(frame: self.view.bounds)
        mapView.animate(toViewingAngle: 45)
        mapView.mapType = GMSMapViewType.satellite
        self.view = mapView


    }