Xcode 如何在swift中访问其他类中的变量?
我使用Xcode 11编写应用程序。下面的代码使用swift提供的Coremidi库读取midi数据。我在访问函数MYMIDIReadProc中的变量“dumpStr”时遇到问题。因为我需要通过USB电缆将midi设备连接到iPhone。我需要查看iPhone中的变量。但是,该程序只允许我使用打印功能。有人能帮我吗Xcode 如何在swift中访问其他类中的变量?,xcode,coremidi,Xcode,Coremidi,我使用Xcode 11编写应用程序。下面的代码使用swift提供的Coremidi库读取midi数据。我在访问函数MYMIDIReadProc中的变量“dumpStr”时遇到问题。因为我需要通过USB电缆将midi设备连接到iPhone。我需要查看iPhone中的变量。但是,该程序只允许我使用打印功能。有人能帮我吗 class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textfield
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
}
}
类ViewController:UIViewController、UIExtFieldDelegate{
@IBOutlet弱var textfield2:UITextField!
@IBEXT弱var dytextField:UITextField!
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后执行任何其他设置。
//textView.delegate=self
//设dytextField=UITextField(帧:CGRect(x:0,y:0,宽度:200,高度:50))
textfield2.textColor=UIColor.black
textfield2.text=“你好”
textfield2.delegate=self
//self.view.addSubview(dytextField)
}
//func textField didbeginediting(textField:UITextField){
//println(“开始编辑”+textField.text)
//}
变量计数:UInt32=0
让MyMIDIReadProc:MIDIReadProc={pktList,readProcRefCon,srcconrefcon在
let packetList:MIDIPacketList=pktList.pointee
var packet:MIDIPacket=packetList.packet
对于uu1…packetList.numPackets
{
让字节=镜像(反射:packet.data);
var dumpStr=“”;
var i=数据包长度;
for(1;,attr),以字节为单位。枚举()
{
dumpStr+=字符串(格式:“$%02X”,属性值为!UInt8);
i-=1;
if(我同意你的建议,但问题仍然存在。“弱”只能应用于类和类绑定的协议类型,而不能应用于“(ViewController)->()->ViewController”。
实例成员“dumpStr”不能用于类型“ViewController”;是否改为使用此类型的值?
类型的值(ViewController)->()->ViewController'没有成员“dumpStr”
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
}
}