如何使用Swift 3拨打电话?

时间:2016-10-14 14:20:05

标签: ios swift3

我正在为一家企业构建一款应用,而且我已陷入死胡同。我需要一个按钮,可以拨打客户的手机号码。

我有这个,它应该在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)!)

3 个答案:

答案 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)

iOS 10中不推荐使用

openURL(:)

新方法是:

- (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!)
    }

(希望这会有所帮助,对于我在移动设备上的任何错误感到抱歉)