'ErrorType' is not convertible to 'NSError'

后端 未结 2 1086
感动是毒
感动是毒 2021-02-20 13:21

I have an error with Google Analytics:

\'ErrorType\' is not convertible to \'NSError\'; did you mean to use \'as!\' to force downcast?

2条回答
  •  名媛妹妹
    2021-02-20 13:39

    The error message tells you the issue and suggests a solution. The constant error in the catch block is of type ErrorType, and you want to cast it to NSError, a cast which may not succeed. Therefore you cannot use the regular as operator which is only for casts that the compiler can tell will always succeed. Instead you either need to use as! to force-cast or as? to do a safe-cast.

    catch {
            // Report any error we got.
            var dict = [String: AnyObject]()
            dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
            dict[NSLocalizedFailureReasonErrorKey] = failureReason
    
            if let underlyingError = error as? NSError {
                dict[NSUnderlyingErrorKey] = underlyingError
            }
            let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
            // Replace this with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
            abort()
        }
    

    For your second issue, you have the opposite problem. You are using the as! operator for a cast that the compiler knows will always work. You should just use the plain as operator. And the third issue is that you are declaring a variable (var) whose value you never change. In those cases, using a constant (let) is preferred.

    let builder = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]
    

提交回复
热议问题