2016-09-21 1 views
0

J'ai récemment téléchargé Xcode 8.0 et essayé d'exécuter mon projet précédent qui utilise le noyau bluetooth.Xcode 8.0 CBCentralManager Problème

J'ai activé Utiliser héritage Swift Version du langage dans la construction pour la mise en compatibilité rapide 2.3 tout fonctionne, mais un problème survenu,

func centralManagerDidUpdateState(central: CBCentralManager) 
{ 
    print("state is \(central.state.rawValue)") 
    if (central.state == CBCentralManagerState.PoweredOn) 
    { 
     self.centralManager?.scanForPeripheralsWithServices([serviceUUID], options: nil) 
    } 
    else 
    { 
     // do something like alert the user that ble is not on 
    } 
} 

précédemment central.state retournerait Type CBCentralManagerState comme int, mais maintenant il renvoie CBManagerState donc eu une erreur alors je suis passé à

if (central.state == CBManagerState.PoweredOn) 

Mais CBManagerState est uniquement pris en charge dans IOS 10+ mais je veux le construire pour IOS 8.3+ alors comment puis-je changer le code?

MISE À JOUR J'ai aussi projet converti en rapide 3.0, mais même question, comment puis-je exécuter ce projet sur les mobiles avec la version ios ci-dessous 10?

Répondre

3

L'approche la plus simple est juste d'utiliser la référence sténographie à la valeur d'énumération:

func centralManagerDidUpdateState(central: CBCentralManager) 
{ 
    print("state is \(central.state.rawValue)") 
    if (central.state == .PoweredOn) 
    { 
     self.centralManager?.scanForPeripheralsWithServices([serviceUUID], options: nil) 
    } 
    else 
    { 
     // do something like alert the user that ble is not on 
    } 

} 

maintenant votre code compilera sans erreurs ou avertissements et fonctionne correctement sur toutes les cibles