2014-10-22 8 views
4

Я пытаюсь использовать CTCallCenter в Swift, однако он всегда отображает ошибку.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

Вы получаете ошибку, потому что заявляете об этом неправильно. –

+0

Да, я его знаю, Но на самом деле я не знал, как правильно называть «callEventHandler», даже видел ссылки. Вы знаете, как писать CTCall «callEventHandler»? –

ответ

1

Из документации Apple:

В ответ на сотовую связь События

отгруженной, когда вызов изменяет состояние.

Декларация:

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

Обсуждение:

объект блок отеля вам отправляется на приоритет по умолчанию очереди глобальной доставки, когда вызов изменяет состояние. Чтобы обрабатывать такие события вызова, определите блок обработчика в приложении и назначьте его этому свойству. Вы должны реализовать блок обработчика для поддержки вызова из любого контекста.

Если ваше приложение активно, когда происходит событие вызова, система отправляет событие непосредственно вашему обработчику. Однако события вызова также могут иметь место, пока приложение приостановлено. Пока он приостановлен, ваше приложение не принимает события вызова. Когда ваше приложение возобновляет активное состояние, оно получает одно событие вызова для каждого вызова, который изменил состояние, независимо от того, сколько состояний изменило вызов, когда ваше приложение было приостановлено. Событие одиночного вызова, отправленное вашему обработчику, после вашего приложения, возвращающегося в активное состояние, описывает состояние вызова в это время.

Например, предположим, что ваше приложение изменилось с активного на приостановленное состояние, когда вызов находится в состоянии соединения. Предположим также, что пока ваше приложение приостановлено, вызов отключается. Когда ваше приложение вернется в активное состояние, вы получите событие сотового вызова, указывающее, что вызов отключен.

Вот более сложный пример. Предположим, что ваше приложение изменилось с активного на приостановленное состояние после того, как пользователь инициировал вызов, но до его подключения (т. Е. Ваше приложение приостанавливается, когда звонок находится в состоянии набора).Предположим далее, что, пока ваше приложение приостановлено, вызов сначала переключается на подключенное состояние, а затем в отключенное состояние. Когда ваше приложение возвращается в активное состояние, вы получаете одно событие сотового вызова, указывающее, что вызов отключен.

Возможно, теперь вы можете понять, как заявить об этом.

+0

Могу я спросить больше? Это означает, что первая строка этого метода подобна этому? ** callEventHandler: {(_ instance_: CTCall!) -> Void} ** Я попытался каким-то образом, но я не мог найти правильный путь ... –

+0

Вы попробовали это? var callCenter: ((CTCall!) -> Пустота)! –

+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 
    } 
} 

Надеется, что это помогает.

+0

Извините, если я ошибаюсь, но я думаю, что это приведет к циклу удержания. Чтобы этого избежать, я бы написал: '{[слабое я] (вызов: CTCall!) В .... self? .callConnected() ....}'. –