swift - 顶层不允许使用表达式

标签 swift

我是一名初级 Swift 程序员。

以下代码似乎可以在 Xcode 7.0 Playground 中正常编译(没有可见错误):

//: Playground - noun: a place where people can play

//#!/usr/bin/env xcrun swift

import WebKit

let application = NSApplication.sharedApplication()
application.setActivationPolicy(NSApplicationActivationPolicy.Regular)
let window = NSWindow()
window.setContentSize(NSSize(width:800, height:600))
window.styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask
window.center()
window.title = "Minimal Swift WebKit Browser"
window.makeKeyAndOrderFront(window)

class WindowDelegate: NSObject, NSWindowDelegate {

    func windowWillClose(notification: NSNotification) {
        NSApplication.sharedApplication().terminate(0)
    }
}
let windowDelegate = WindowDelegate()
window.delegate = windowDelegate

class ApplicationDelegate: NSObject, NSApplicationDelegate {
    var _window: NSWindow

    init(window: NSWindow) {
        self._window = window
    }

    func applicationDidFinishLaunching(notification: NSNotification) {
        let webView = WebView(frame: self._window.contentView!.frame)
        self._window.contentView!.addSubview(webView)
        webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.apple.com")!))
    }
}

当将完全相同的代码粘贴到 OSX 的新 Cocoa 应用程序的“AppDelegate.swift”文件中时,我收到 7 个错误,全部完全相同:“顶层不允许表达式”。

通过搜索,我推断 Playground 允许正常项目不允许的操作,并且发生错误是因为表达式位于“类或实例方法之外”。

但是我不确定如何修改程序才能正确构建。

最佳答案

是的,普通项目不允许在顶层编写代码,因为没有明显的时间来运行它。您需要决定何时运行激活策略和窗口/委托(delegate)代码(即,将该代码移至方法内部)。我建议 applicationDidFinishLaunching(_:),因为它是在您的应用程序完成启动时调用的,并且是进行此类设置的常见位置。完成的代码将如下所示:

import WebKit

class WindowDelegate: NSObject, NSWindowDelegate {
    func windowWillClose(notification: NSNotification) {
        NSApplication.sharedApplication().terminate(0)
    }
}

class ApplicationDelegate: NSObject, NSApplicationDelegate {
    var _window: NSWindow

    init(window: NSWindow) {
        self._window = window
    }

    func applicationDidFinishLaunching(notification: NSNotification) {
        let webView = WebView(frame: self._window.contentView!.frame)
        self._window.contentView!.addSubview(webView)
        webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.apple.com")!))

        let application = NSApplication.sharedApplication()
        application.setActivationPolicy(NSApplicationActivationPolicy.Regular)
        let window = NSWindow()
        window.setContentSize(NSSize(width:800, height:600))
        window.styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask
        window.center()
        window.title = "Minimal Swift WebKit Browser"
        window.makeKeyAndOrderFront(window)

        let windowDelegate = WindowDelegate()
        window.delegate = windowDelegate
    }
}

关于swift - 顶层不允许使用表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813925/

相关文章:

swift - ARKit:通过添加 anchor 将 USDZ 模型放置在平面上,但它总是在我的头顶上方

ios - 当我只创建一个时,为什么会有多个 SKSpriteNode 和 SKAudioNode 对象?

ios - 显示详细信息转场时未调用 Deinit

ios - 在 ios swift 的 pdfview 中没有获得 "menu"中的突出显示选项

ios - DropboxSDK : unable to link error

ios - 无法使用类型为 'NSURL' 的参数列表调用类型为 '(fileURLWithPath: NSURL)' 的初始值设定项

Swift - 将两个 UITextFeild 的值相乘

ios - tableView 委托(delegate)和数据源

ios - 每次在按钮中完成点击时执行一个方法

ios - 为点击手势和通知声明函数时是否需要参数/参数?