在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

我刚刚开始开发一个应用程序,它最终会通过Arduino UNO运行DIY数控机床。我已经找到了一些用Objective-C编写的串行通信资源,所以我想我应该试着让它工作起来。我正在尝试实现一个功能,搜索计算机上可用的串行端口,并在下拉菜单中显示它们

Xcode并没有抱怨任何Objective-C组件,所以我现在假设这不是问题所在。但是,Xcode给了我一个错误:“使用未解析标识符'refreshSerialList'”。这是苹果建议在Swift中调用Objective-C方法的方式:

连载

#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

我想您需要先创建一个串行对象来调用该方法吗?