首页 > 解决方案 > 不能下标 NSObject 类型的值

问题描述

这段代码:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {

var window: UIWindow?
var locationManager: CLLocationManager?
var significatLocationManager : CLLocationManager?

private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
    if(UIApplication.shared.backgroundRefreshStatus == UIBackgroundRefreshStatus.available){
        print("Yes")
    }else{
        print("No")
    }

    if let launchOpt = launchOptions{
        if (launchOpt[UIApplicationLaunchOptionsLocationKey] != nil) {
            self.significatLocationManager = CLLocationManager()
            self.significatLocationManager?.delegate = self
            self.significatLocationManager?.requestAlwaysAuthorization()
            if #available(iOS 9.0, *) {
                self.significatLocationManager!.allowsBackgroundLocationUpdates = true
            }
            self.significatLocationManager?.startMonitoringSignificantLocationChanges()

        }else{
            self.locationManager           = CLLocationManager()
            self.locationManager?.delegate = self
            self.locationManager?.requestAlwaysAuthorization()
            if #available(iOS 9.0, *) {
                self.locationManager!.allowsBackgroundLocationUpdates = true
            }
            self.locationManager?.startMonitoringSignificantLocationChanges()
        }

    }else{

        self.locationManager           = CLLocationManager()
        self.locationManager?.delegate = self
        self.locationManager?.requestAlwaysAuthorization()
        if #available(iOS 9.0, *) {
            self.locationManager!.allowsBackgroundLocationUpdates = true
        }

        self.locationManager?.startMonitoringSignificantLocationChanges()

    }

    return true
}

给出这个错误:

无法使用“UIApplication.LaunchOptionsKey”类型的索引为“[NSObject:AnyObject]”类型的值下标

我不知道这是什么意思。有什么帮助吗?

我正在 Xcode 10.2.1 中编译 Swift 4.0。

标签: iosswift

解决方案


您的问题在于函数签名和以下行

  if (launchOpt[UIApplicationLaunchOptionsLocationKey] != nil) 

在 didFinishLaunchOptions 中,您将启动选项用作旧方法[NSObject : AnyObject]?并使用最新方法访问启动选项UIApplicationLaunchOptionsLocationKey

旧方法

 private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool

最新方法

private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

推荐阅读