我正在为一家企业构建一款应用,而且我已陷入死胡同。我需要一个按钮,可以拨打客户的手机号码。
我有这个,它应该在Swift 2中起作用:
@IBAction func clientMobile(_ sender: AnyObject) {
UIApplication.shared.openURL(self.mobile!)
}
然而,openURL已被弃用,我在智能感知中看不到任何替代方案。什么是Swift 3相当于上面的代码行?
另外一件事,当我运行此代码时,我遇到以下错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
我知道错误与self.mobile
有关,但我不确定如何修复它。
self.mobile
被声明并初始化为:
var mobile : URL?
//inside view will appear
self.mobile = URL(string: "telprompt://" + (self.dog?.client?.mobile)!)
答案 0 :(得分:3)
you much check iOS version
guard let number = URL(string: "telprompt://123456789") else { return }
if #available(iOS 10.0, *) {
UIApplication.shared.open(number)
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(number)
}
答案 1 :(得分:1)
从它的外观来看,你应该检查dog.client.mobile
电话号码中的一些无效字符,甚至是零(我不知道手机是否真的是可选的,如果是这样你应该检查是否为零在尝试发起呼叫之前。)
您的URL
看起来像是nil,而您正试图将其传递给openURL
。
您的电话号码不应包含()+-
等符号。您可以使用stringByReplacingCharactersInSet
轻松删除它们(现在无法记住Swift 3中的确切名称。
答案 2 :(得分:0)
新方法是:
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options
completionHandler :( void(^ __nullable)(BOOL成功))完成
支持iOS 10及早期版本的示例用法:
// iOS10 check
if (UIApplication.shared.respondsToSelector(#selector(UIApplication.shared.openURL(_:options:completionHandler:))) {
UIApplication.shared.openURL(self.mobile!, options: [:], completionHandler:nil)
} else {
UIApplication.shared.openURL(self.mobile!)
}
(希望这会有所帮助,对于我在移动设备上的任何错误感到抱歉)