我是一名初级 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/