I have an error with Google Analytics:
\'ErrorType\' is not convertible to \'NSError\'; did you mean to use \'as!\' to force downcast?
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]