openURL 在iOS10上已被弃用。

苹果在iOS 2 推出openURL:方法用于打开外部链接,而与之相关的方法 canOpenURL: 在iOS 9隐私控制里也禁止查询设备中已安装的App。

苹果在iOS 10 中已经弃用了openURL:这个旧方法,用openURL:options:completionHandler:来代替。

iOS 10中的新方法:

// Objective-C

- (void)openURL:(NSURL*)url options:(NSDictionary *)options completionHandler:(void (^ __nullable)(BOOL success))completion

// Swift

open func open(_ url: URL, options: [String : Any] = [:], completionHandler completion: (@escaping (Bool) -> Swift.Void)? = nil)

它有三个参数:

要打开的URL。

一个可选字典(可参考下面的实例)。传一个空字典时,该方法的效果与 openURL:一致。

一个带有 成功与否 参数的 completion handler(可认为是闭包或block)。如果你对这个状态不感兴趣可以传Null。

代码实例:

显示 Objective-C代码:

- (void)openScheme:(NSString *)scheme {
  UIApplication *application = [UIApplication sharedApplication];
  NSURL *URL = [NSURL URLWithString:scheme];

  if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
    [application openURL:URL options:@{}
       completionHandler:^(BOOL success) {
      NSLog(@"Open %@: %d",scheme,success);
    }];
  } else {
    BOOL success = [application openURL:URL];
    NSLog(@"Open %@: %d",scheme,success);
  }
}

// Typical usage
[self openScheme:@"tweetbot://timeline"];

Swift 版代码:

func open(scheme: String) {

ifleturl = URL(string: scheme) {

if#available(iOS 10, *) {

UIApplication.shared.open(url, options: [:], completionHandler: {

(success) in

print("Open \(scheme): \(success)") }

) } else{

letsuccess = UIApplication.shared.openURL(url)

print("Open \(scheme): \(success)")

}

}

}

// Typical usage

open(scheme: "tweetbot://timeline")

 

参考文章:

链接:https://juejin.im/post/5d26e80bf265da1bca520552

 

 

 

你可能感兴趣的:(openURL 在iOS10上已被弃用。)