问题
After the Xcode update, the compiler began to throw an error on the working code (both functions are in the AppDelegate.swift).
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
{
FBLoginView.self
FBProfilePictureView.self
return true
}
With error:
/Users/../AppDelegate.swift:14:11: Objective-C method 'application:didFinishLaunchingWithOptions:' provided by method 'application(:didFinishLaunchingWithOptions:)' conflicts with optional requirement method 'application(:didFinishLaunchingWithOptions:)' in protocol 'UIApplicationDelegate'
And second
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: NSString?,
annotation: AnyObject) -> Bool {
var wasHandled:Bool = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication as! String)
return wasHandled
}
with error
/Users/../AppDelegate.swift:25:11: Objective-C method 'application:openURL:sourceApplication:annotation:' provided by method 'application(:openURL:sourceApplication:annotation:)' conflicts with optional requirement method 'application(:openURL:sourceApplication:annotation:)' in protocol 'UIApplicationDelegate'
I understand that most likely I should like you to stick together somehow these two functions into one. I do not understand why this code suddenly stopped working in 6.3, despite the fact that it worked in 6.2.
回答1:
I'm not sure exactly why the compiler is throwing the error, however I do see a difference in the default Swift version of those same methods. Perhaps you could replace the function declaration with those created with a normal Swift project:
1
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
2
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
I'd recommend replacing your method declarations with the above to see if it compiles now.
EDIT 1 (9/21/2015): I've confirmed these are now up to date for Xcode 7's public release. They removed the optional (annotation: AnyObject?
) and made it (annotation: AnyObject
), in declaration #2.
回答2:
The type of the launchOptions parameter of the didFinishLaunchingWithOptions function was changed in XCode 6.3:
"launchOptions: NSDictionary?" has become "launchOptions: [NSObject: AnyObject]?"
Just change your function header to match the following:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
回答3:
You should also make sure you are using the correct type. Use String instead of NSString.
回答4:
Try overriding that method again from Xcode completions. Worked for me.
回答5:
launchOptions have been changed; try changing out "launchOptions: NSDictionary?" to "launchOptions: [NSObject: AnyObject]?"
Hope this helps!
来源:https://stackoverflow.com/questions/28460472/objective-c-method-conflicts-with-optional-requirement-method-swift