2014-10-22 60 views
4

我想在Swift中使用CTCallCenter,但它总是显示错误。CTCallCenter in Swift

我想这可能会导致如何使用闭包,但实际上我不熟悉它。

有没有人有想法来解决这个问题?

这里是我的代码

import CoreTelephony 

class ViewController: UIViewController{ 

    var callCenter:CTCallCenter = CTCallCenter() 

    override func viewDidLoad() { 

      callCenter.callEventHandler(call:CTCall) -> Void in{ 
       //will get CTcall status here 
      } 
    } 
} 

有三个错误。

1,语句的斜撑块是一个未使用的闭合

2,预期表达

3,在一条线上连续语句必须由 “;” 分隔。

我试图改变它的表示,但任何方式都不正确。

在此先感谢!

+0

由于您声明的方式错误,您会收到错误信息。 – 2014-10-22 07:23:00

+0

是的,我认为它,但实际上我不知道如何以正确的方式调用“callEventHandler”,即使我看到引用。你知道如何编写CTCall“callEventHandler”吗? – 2014-10-22 07:27:09

回答

1

Apple文档:

响应蜂窝呼叫事件

当呼叫状态改变时调度。

声明:

var callEventHandler: ((CTCall!) -> Void)!

讨论:

此属性的块对象上的默认优先级全局调度队列调度,当呼叫改变状态。要处理此类调用事件,请在应用程序中定义一个处理程序块并将其分配给此属性。您必须实现处理程序块以支持从任何上下文中调用。

如果您的应用程序在发生呼叫事件时处于活动状态,系统会立即将事件分派给您的处理程序。但是,通话事件也可能在您的应用程序暂停时发生。它被暂停时,您的应用程序不会收到通话事件。当您的应用程序恢复活动状态时,无论呼叫在您的应用程序暂停时遇到多少状态变化,都会为每次更改状态的呼叫接收单个呼叫事件。在您的应用程序返回到活动状态时,发送到您的处理程序的单个调用事件描述了当时的调用状态。

例如,假设您的应用程序在呼叫处于连接状态时从活动状态变为挂起状态。假设你的应用程序暂停时,呼叫断开。当您的应用程序返回到活动状态时,您会收到蜂窝呼叫事件,指出呼叫已断开。

这是一个更复杂的例子。假设您的应用程序在用户发起呼叫后但在连接之前(即应用程序在呼叫处于拨号状态时暂停)之后从活动状态变为暂停状态。进一步假设,当您的应用程序暂停时,呼叫首先变为连接状态,然后变为断开状态。当您的应用程序返回到活动状态时,您会收到一个蜂窝呼叫事件,指出呼叫已断开。

可能现在您可以了解如何申报。

+0

我可以问更多吗?这意味着这种方法的第一行是这样的? ** callEventHandler:{(_ instance_:CTCall!) - > Void} **我尝试了一些方法,但我找不到正确的方法... – 2014-10-22 07:40:34

+0

你试过这个吗? var callCenter:((CTCall!) - > Void)! – 2014-10-22 07:56:46

+0

是的,但它不工作... – 2014-10-22 08:49:40

8

我得到这个工作使用下面的代码:

import CoreTelephony 

class SomeClass: UIViewController { 

    private var callCenter = CTCallCenter() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     callCenter.callEventHandler = { (call:CTCall!) in 

      switch call.callState { 
       case CTCallStateConnected: 
        println("CTCallStateConnected") 
        self.callConnected() 
       case CTCallStateDisconnected: 
        println("CTCallStateDisconnected") 
        self.callDisconnected() 
       default: 
        //Not concerned with CTCallStateDialing or CTCallStateIncoming 
        break 
      } 
     } 
    } 

    func callConnected(){ 
     // Do something when call connects 
    } 

    func callDisconnected() { 
     // Do something when call disconnects 
    } 
} 

希望它能帮助。

+0

对不起,如果我错了,但我认为这会导致一个保留周期。为了避免它,我会写:'{[weak self](call:CTCall!)in .... self?.callConnected()....}'。 – 2017-04-05 16:57:43