title: SWIFT - BLE communications
body: <p>I've got a SWIFT application that have to send a value to my Arduino with Bluetooth LowEnergy module!</p>
  
  <p>I've done correctly the search and connection parts but I'm not able to send and receive any data.</p>
  
  <p>Here is my code to get a list of BLE devices available and put all this in a table view then after click in a cell the app provide to connect the device with them!</p>
  
  <p>All this works perfectly but I don't know to send for example a "a" character from app to BLE and get back the answer from arduino to app!</p>
  
  <pre><code>    import UIKit
      import CoreBluetooth
  
  
  class BluetoothList: UITableViewController,CBCentralManagerDelegate, CBPeripheralDelegate {
  
      var listValue = [Lista]()
      var Blue: CBCentralManager!
      var conn: CBPeripheral!
      var a: String!
      var char: CBCharacteristic!
  
      func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
          if (peripheral.name == a){
              self.conn = peripheral
              self.conn.delegate = self
              Blue.stopScan()
              Blue.connectPeripheral(self.conn, options: nil)
              self.performSegueWithIdentifier("ConnectionSegue", sender: nil)
          }
          else{
              listValue = [
                  Lista(Name: peripheral.name!, RSS: RSSI.stringValue)
              ]
              self.tableView.reloadData()
          }
      }
  
      func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) {
          peripheral.delegate = self
          peripheral.discoverServices(nil)
  
      }
  
      func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?) {
          if let servicePeripheral = peripheral.services! as [CBService]!{
              for service in servicePeripheral{
                  peripheral.discoverCharacteristics(nil, forService: service)
              }
          }
      }
  
      func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?) {
          if let characterArray = service.characteristics! as [CBCharacteristic]!{
  
              for cc in characterArray {
                  if(cc.UUID.UUIDString == "FF05"){
                      print("OKOK")
                      peripheral.readValueForCharacteristic(cc)
                  }
              }
          }
      }
  
      func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {
          if (characteristic.UUID.UUIDString == "FF05"){
  
              let value = UnsafePointer&lt;Int&gt;((characteristic.value?.bytes.memory)!)
              print("\(value)")
          }
      }
  
      func centralManagerDidUpdateState(central: CBCentralManager){
          switch(central.state){
          case .PoweredOn:
              Blue.scanForPeripheralsWithServices(nil, options:nil)
              print("Bluetooth is powered ON")
          case .PoweredOff:
              print("Bluetooth is powered OFF")
          case .Resetting:
              print("Bluetooth is resetting")
          case .Unauthorized:
              print("Bluetooth is unauthorized")
          case .Unknown:
              print("Bluetooth is unknown")
          case .Unsupported:
              print("Bluetooth is not supported")
          }
      }
  
      override func viewDidLoad() {
  
          super.viewDidLoad()
          Blue = CBCentralManager(delegate: self, queue: nil)
  
      }
  
      override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
          let currentCell = tableView.cellForRowAtIndexPath(tableView.indexPathForSelectedRow!)! as UITableViewCell
          a = currentCell.textLabel?.text
          Blue = CBCentralManager(delegate: self, queue: nil)
      }
  
      override func numberOfSectionsInTableView(tableView: UITableView) -&gt; Int {
          return 1
      }
  
      @IBAction func Reload_BTN(sender: AnyObject) {
          self.tableView.reloadData()
      }
  
      override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
          return self.listValue.count
      }
  
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
      }
  
  
      override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -&gt; UITableViewCell {
  
          let cella = self.tableView.dequeueReusableCellWithIdentifier("Cella", forIndexPath: indexPath)
          let Lista = self.listValue[indexPath.row]
          cella.textLabel?.text = Lista.Name
          cella.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
          return cella
      }
  </code></pre>