应用程序的Swift 2方法签名是什么:openURL:options:看起来像?

时间:2016-01-08 16:35:23

标签: ios swift url-scheme openurl

我正在研究处理自定义URL方案的应用程序的Swift版本。

您需要实施的方法在iOS 9中已更改。

该方法的Objective-C版本在Objective-C应用程序中正常工作:

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<NSString *,
                     id> *)options
{
  //my code here
}

但是,在我的Swift应用程序中,等效功能:

func application(application: UIApplication,
  openURL: NSURL,
  options: [String : AnyObject]) -> Bool
{
  //My code here
}

我在iOS 9设备上运行应用时从未调用过。当我在Safari中调用我的自定义URL方案时,系统会提示“打开”appname“?”,当我点击打开时,它会将我的应用程序带回前台,但上述方法不会被调用。

我的方法签名中必定存在一些微妙的不匹配,但我看不到它。我究竟做错了什么?我尝试过各种各样的变化,但都没有。

2 个答案:

答案 0 :(得分:1)

我的问题似乎是由于项目损坏导致的红鲱鱼。我创建了一个新项目文件并在新项目中复制了相同的代码,application:openURL:options:被正确调用。

这是一个非常奇怪的问题。如果我在故障项目中删除“AppDelegate.swift”并将其替换为AppDelegate.m / AppDelegate.h,则在Objective-C版本中正确调用application:openURL:options:

我怀疑Xcode中存在一个间歇性错误导致某些项目在应用程序委托给Swift时无法调整您的应用程序委托application:openURL:options:

如果您遇到同样的问题,可能需要创建一个新项目,设置info.plist,然后复制application:openURL:options:方法以查看新项目是否调用您的方法。

答案 1 :(得分:0)

功能签名(iOS9)是:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool

如果你想测试它的工作原理,只需将其复制到你的app delegate:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool 
{
        print("Scheme: \(url.scheme)")
        print("Host: \(url.host)")
        print("Path: \(url.path)")
        print("Query String: \(url.query)")

        // DEBUG: get all key-value pairs in options also
        for (key, value) in options {
            print("Key: \(key), Value: \(value)")
        }
        return true
}

还要记住将“scheme”(应用程序名称)添加到info.plist文件中。像这样在手机上通过Safari拨打电话

  

方案://主机/路径查询