如何在swift中正确读取外设值?

我想从我的一个视图控制器读取一个字节数组到另一个,请在下面找到我的代码。如何在swift中正确读取外设值?

从我的第一个视图

class First: UIViewController { 

var myByteArray = [UInt8](repeating:0, count: 20)

viewDidLoad(){

......}

几条语句后她在那里我在一个函数读我的数据

func passThis(){ 

let ReceiveData = rxCharacteristic?.value

if let ReceiveData = ReceiveData {

let ReceivedNoOfBytes = ReceiveData.count

myByteArray = [UInt8](repeating: 0, count: ReceivedNoOfBytes)

(ReceiveData as NSData).getBytes(&myByteArray, length: ReceivedNoOfBytes)

print("Data Received ",myByteArray)

}

这是我的,我试图来读取首先我阵列的第二视图查看

class Second: UIViewController { 

var myByteArray2 = [UInt8](repeating: 0, count: 20)

viewDidLoad(){

super.viewDidLoad()

let fvc = First()

myByteArray2 = fvc.myByteArray

print(myByteArray2)

}

现在我有[11,12,13,14,15,16,17,18,19,20]从myByteArray 但myByteArray2中有[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]?

有人可以帮忙吗?

另外,如何在写入和读取新值之前清除rxCharacterstic中的readValue缓冲区?

任何帮助/意见表示赞赏。

感谢

编辑 - >我的传球是如何做

从BLECentral

class BLECentral: ... 

var centralManager: CBCentralManager!

//After Scanning and connecting

func centralManager(_central: CBCentralManager, didConnect peripheral: CBPeripheral){

peripheral.delegate = self

peripheral.discoverServices([BLEUUID])

//Once connected, move to new view controller to manager incoming and outgoing data

let storyboard = UIStoryboard(name: "Main", bundle: nil)

let firstVC = storyboard.instantiateViewController(withIdentifier: "First") as! First

firstVC.peripheral = peripheral

navigationController?.pushViewController(firstVC, animated: true)

}

现在在我的第一个下准备赛格瑞块我传递周围像这样

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

if segue.destination is Second

{

let vc2 = segue.destination as? Second

vc2.periperal = blePeripheral

}

}

回答:

您正在从哟创建新的First视图控制器而不是访问已经创建的视图控制器。

//Create a new View Controller 

let fvc = First()

所以你有两个First现在是。你想要做的是访问已经创建的First视图控制器。假设没有其他办法,你想拥有一个“Singleton”。这是一个非常糟糕的方式来处理这个问题,稍后我会解释,而且很可能有更好的方法,但是如果他们从不沟通,我会给出一个解决方案来访问First from Second,但First已经创建。

如果您在First声明像一块代码:

static let shared = First() 

那么这个单可以通过

let first = First.shared 

如此说来访问,这就是视图之间处理通信一个非常糟糕的方式控制器。如果您从First调用Second,则应将数据从First移到Second(或者您可以传递First to Second的引用,以便Second可以访问First)。

有您导航前通过在

func prepare(for segue: UIStoryboardSegue, sender: Any?) 

方法视图控制器之间的数据普遍好方法。无论什么时候,使第二个视图控制器应该传递它所需要的数据。

最后,Singleton视图控制器是一个糟糕的想法的另一个原因是它远离了MVC概念。因此,如果您无法将正确的数据传递给第二个,那么您可能需要一个新的类来处理您的数据,First和Second都可以使用MVC中的Model。

以上是 如何在swift中正确读取外设值? 的全部内容, 来源链接: utcz.com/qa/260395.html

回到顶部