我正在尝试在Swift中使用CTCallCenter,但它总是显示错误。
我想它可能导致如何使用闭包但实际上我并不熟悉它。
有人有想法解决这个问题吗?
这是我的代码
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 :(得分: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
}
}
希望它有所帮助。
答案 1 :(得分:1)
来自Apple文档:
回应手机通话事件
当呼叫改变状态时调度。
<强>声明:强>
var callEventHandler: ((CTCall!) -> Void)!
<强>讨论:强>
当调用更改状态时,将在默认优先级全局调度队列上调度此属性的块对象。要处理此类调用事件,请在应用程序中定义处理程序块并将其分配给此属性。您必须实现处理程序块以支持从任何上下文调用。
如果您的应用程序在发生调用事件时处于活动状态,系统会立即将事件调度给您的处理程序。但是,在您的应用程序暂停时也可以进行呼叫事件。暂停时,您的应用程序不会收到呼叫事件。当您的应用程序恢复活动状态时,它会为每个更改状态的呼叫接收单个呼叫事件 - 无论您的应用程序暂停时呼叫经历了多少状态更改。当您的应用程序返回活动状态时,发送给您的处理程序的单个调用事件描述了当时调用的状态。
例如,假设您的应用程序在呼叫处于连接状态时从活动状态更改为挂起状态。假设您的应用程序暂停时,呼叫将断开连接。当您的应用程序返回活动状态时,您将收到一个蜂窝呼叫事件,指示呼叫已断开连接。
这是一个更复杂的例子。假设您的应用程序在用户启动呼叫后但在连接之前从活动状态更改为挂起状态(即,当呼叫处于拨号状态时,您的应用程序将暂停)。进一步假设,当您的应用程序暂停时,呼叫首先更改为已连接状态,然后更改为已断开连接状态。当您的应用程序返回活动状态时,您将收到一个蜂窝电话呼叫事件,表明呼叫已断开连接。
现在可以理解如何宣布这一点。