2015-08-11 2 views
0

Я делаю приложение с использованием основы CoreBluetooth, и я недавно портировал его на swift 2.0. В моем коде у меня есть глобальная переменная, которая является CBCharacteristic, и в быстром 1.2 я мог бы просто сделать:Swift 2.0: Инициализировать CBCharacteristic?

var bob:CBCharacteristic = CBCharacteristic() 

Но теперь он дает мне ошибку, что функция инициализации() для CBCharacteristic была явно скрыта, так Я не могу его инициализировать. Есть ли способ обойти это?

+0

Какова цель этой переменной в вашем коде? Переключение на 'CBMutableCharacteristic' решит вашу проблему? – hennes

+0

@hennes Я устанавливаю переменную, как только я обнаруживаю устройство, к которому я хочу подключиться, чтобы я мог читать данные из него. Кроме того, 'CBMutableCharacteristic' не инициализируется в swift 2. – user3042719

+0

Похоже, CBMutableCharacteristic имеет 'init (тип UUID: CBUUID ?, свойства: CBCharacteristicProperties, значение: NSData ?, разрешения: CBAttributePermissions)'? – nielsbot

ответ

3

Экземпляры CBCharacteristic могут быть получены только через процесс обнаружения службы.

В вашем Swift 1.2 кода вы Назначив «пустой» CBCharacteristic просто чтобы удовлетворить компилятор о неиницализированных переменных, но вы должны были бы вводным вопрос времени был вы пытались использовать bob перед назначением «реальные» CBCharacteristic.

Swift предназначен для упрощения создания «безопасного» кода, который не имеет тонких проблем во время выполнения из-за неправильного использования типов. Нет смысла создавать экземпляр CBCharacteristic напрямую, а в Swift 2.0 вам не рекомендуется делать это.

Если ваш CBCharacteristic это свойство, то он должен быть объявлен как дополнительный, так как он не может иметь значение, пока характеристика не обнаружена

var bob:CBCharacteristic? 

или, если вы уверены, что ваш код не будет пытаться доступ bob перед их установкой -

var bob:CBCharacteristic! 

Первым будет гарантировать, что вы пишете код разворачивать опциональный, прежде чем использовать его, а второй будет давать ошибку времени выполнения, если вы используете его, прежде чем он установлен - как из них предпочтительнее потенциально трудно отлаживать проблему, которую вы бы просто указали на «пустой» CBCharacteristic

+0

Большое вам спасибо! Это создает общий смысл. – user3042719

+0

Какое красивое и полезное объяснение (применимо далеко не только для этого примера). Большое вам спасибо за то, что вы нашли время, чтобы объяснить это так хорошо! – RoberRM