как получить доступ к переменной в другом классе в Swift? - PullRequest
0 голосов
/ 16 марта 2020

Я использую Xcode 11, чтобы написать приложение. Следующий код читает данные MIDI с помощью библиотеки Coremidi с помощью swift. У меня проблема с доступом к переменной "dumpStr" в функции MYMIDIReadPro c. Потому что мне нужно подключить MIDI-устройство к iPhone через USB-кабель. Мне нужно просмотреть переменную в iPhone. Тем не менее, программа позволяет мне использовать только функцию печати. Кто-нибудь может мне помочь?

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var textfield2: UITextField!  
@IBOutlet weak var dytextField: UITextField!  
override func viewDidLoad() {  
    super.viewDidLoad() 
    // Do any additional setup after loading the view.     
    //textView.delegate = self    
   // let dytextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
    textfield2.textColor=UIColor.black
    textfield2.text = "hello"
    textfield2.delegate=self
    //self.view.addSubview(dytextField)
}

//func textFieldDidBeginEditing(textField: UITextField) {
    //println("begin edit"+textField.text)

//}

var count:UInt32 = 0

let MyMIDIReadProc : MIDIReadProc = {pktList,readProcRefCon,srcConnRefCon in
    let packetList:MIDIPacketList = pktList.pointee


     var packet:MIDIPacket = packetList.packet
             for _ in 1...packetList.numPackets
             {
             let bytes = Mirror(reflecting: packet.data).children;
             var dumpStr = "";
             var i = packet.length;
             for (_, attr) in bytes.enumerated()
             {
             dumpStr += String(format:"$%02X ", attr.value as! UInt8);
             i -= 1;
             if (i <= 0)
             {
             break;
             }
             }

            print(dumpStr)
                packet = MIDIPacketNext(&packet).pointee;
             }
             }
@IBAction func showMessage(){
    var midiClient: MIDIClientRef = 0;
    var inPort:MIDIPortRef = 0;
    var src:MIDIEndpointRef = MIDIGetSource(0);

    MIDIClientCreate("MidiTestClient" as CFString, nil, nil, &midiClient);

    MIDIInputPortCreate(midiClient, "MidiTest_InPort" as CFString, MyMIDIReadProc, nil, &inPort);

    MIDIPortConnectSource(inPort, src, &src);

  //PlaygroundPage.current.needsIndefiniteExecution = true
 }


}

1 Ответ

0 голосов
/ 16 марта 2020
class ViewController: UIViewController {

var dumpStr: String {
    didSet {
        // Do what you want to do with dumpStr
    }
}

let MyMIDIReadProc : MIDIReadProc = { [weak self] (pktList, readProcRefCon, srcConnRefCon) in
    // Create dumpStr, assign it to a ViewController property
    self?.dumpStr = dumpStr
        }

}
...