使用SWIFT使用未解析的标识符“dispatch_get_main_queue”

时间:2014-07-15 20:36:34

标签: macos swift

我在SWIFT中使用'dispatch_get_main_queue()'时遇到困难,基本SDK设置为10.9。我正在使用的代码是一个简单的dispatch_async调用,如下所示:

dispatch_async(dispatch_get_main_queue()){
        // Code here
}

但是它产生错误:使用未解析的标识符'dispatch_get_main_queue'。当基本SDK设置为10.10但不是10.9时,它按预期工作。我在使用基本SDK 10.9的非swift应用程序中的objective-c中使用它,但我无法弄清楚为什么它不能与Swift一起使用。

我试图调查它,但目前无法找到有关为什么会发生这种情况以及我可以采取哪些措施来解决它/实现类似功能的问题。如果有人能够阐明这一点或指出我正确的方向,我将非常感激。

所以我的问题是:有没有办法解决这个问题(或至少实现类似的功能)?

编辑1 -

这是我创建的全部功能:

func addSubview(aView: NSView, fillView: Bool, removeExisting: Bool)
{
    dispatch_async(dispatch_get_main_queue()){

        if (aView != nil)
        {
            if (removeExisting)
            {
                for (var subview: NSView) in self.subviews() as NSView[]
                {
                    subview.removeFromSuperview();
                }
            }

            if (fillView)
            {
                aView.setAutoresizingMask(NSViewWidthSizable | NSViewHeightSizable);
                aView.setFrame(NSMakeRect(0, 0, self.frame().size.width, self.frame().size.height));
            }

            self.addSubview(aView);
        }
    }
}

编辑2 - 按照建议将'if(aView!= null)'替换为'if(aView!= nil)'。我不确定我是如何设法做出那个菜鸟错误的!

2 个答案:

答案 0 :(得分:1)

在函数中使用它。这应该有效:

func test() {
    dispatch_async(dispatch_get_main_queue()) {

    }
}

在部署目标为10.9的笔记本电脑上正常工作

或者在你的app app delegate中可能是这样的:

func applicationDidFinishLaunching(aNotification: NSNotification?) {
    // Insert code here to initialize your application
    dispatch_async(dispatch_get_main_queue()) {

    }
}

首先,您应将if (aView != null)替换为if (aView != nil) Swift使用nil而非null

答案 1 :(得分:0)

如果view可以为nil,则应使用可选类型:

func addSubview(view: NSView?, fillView: Bool, removeExisting: Bool) {
    dispatch_async(dispatch_get_main_queue()){
        if let aView = view {
            if removeExisting {
                ...