在Swift程序中实现Objective-C方法
我刚刚开始开发一个应用程序,它最终会通过Arduino UNO运行DIY数控机床。我已经找到了一些用Objective-C编写的串行通信资源,所以我想我应该试着让它工作起来。我正在尝试实现一个功能,搜索计算机上可用的串行端口,并在下拉菜单中显示它们 Xcode并没有抱怨任何Objective-C组件,所以我现在假设这不是问题所在。但是,Xcode给了我一个错误:“使用未解析标识符'refreshSerialList'”。这是苹果建议在Swift中调用Objective-C方法的方式: 连载在Swift程序中实现Objective-C方法,objective-c,swift,Objective C,Swift,我刚刚开始开发一个应用程序,它最终会通过Arduino UNO运行DIY数控机床。我已经找到了一些用Objective-C编写的串行通信资源,所以我想我应该试着让它工作起来。我正在尝试实现一个功能,搜索计算机上可用的串行端口,并在下拉菜单中显示它们 Xcode并没有抱怨任何Objective-C组件,所以我现在假设这不是问题所在。但是,Xcode给了我一个错误:“使用未解析标识符'refreshSerialList'”。这是苹果建议在Swift中调用Objective-C方法的方式: 连载 #i
#import <Cocoa/Cocoa.h>
// import IOKit headers
#include <IOKit/IOKitLib.h>
#include <IOKit/serial/IOSerialKeys.h>
#include <IOKit/IOBSD.h>
#include <IOKit/serial/ioss.h>
#include <sys/ioctl.h>
@interface Serial : NSObject {
IBOutlet NSPopUpButton *serialListPullDown;
}
- (void) refreshSerialList: (NSString *) selectedText;
@end
桥接头.h
#import "Serial.h"
斯威夫特
import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet var window: NSWindow!
@IBOutlet var CommandInput : NSView!
@IBOutlet var serialListPullDown : NSPopUpButton!
func applicationDidFinishLaunching(aNotification: NSNotification?) {
// Insert code here to initialize your application
let refresh = refreshSerialList()
}
func applicationWillTerminate(aNotification: NSNotification?) {
// Insert code here to tear down your application
}
@IBAction func CommandSend(sender : AnyObject) {
}
}
refreshSerialList
接受一个参数,一个字符串。因此,首先您必须创建一个Serial的实例:
var serial = Serial()
然后对实例调用该方法:
serial.refreshSerialList("some string")
while(serialPort==IOIteratorNext(serialPortIterator))
根据IOIteratorNext(serialPortIterator)的每个值测试serialPort的值。但是serialPort从未被分配值,因此这将不起作用。所需的是:
while (serialPort = IOIteratorNext(serialPortIterator))
repeat {
serialPort = IOIteratorNext(serialPortIterator)
if (serialPort != 0) {
<statement>
<statement>
}
} while serialPort != 0
它为serialPort分配一个值并测试其值
在Swift中,不允许在if子句中进行赋值。在Swift中,所需的是:
while (serialPort = IOIteratorNext(serialPortIterator))
repeat {
serialPort = IOIteratorNext(serialPortIterator)
if (serialPort != 0) {
<statement>
<statement>
}
} while serialPort != 0
重复{
serialPort=IOIteratorNext(SerialPorterator)
如果(串行端口!=0){
}
}而串行端口!=0
我想您需要先创建一个串行对象来调用该方法吗?