我重写了Xcode从Objective-C生成Swift的屏幕保护程序模板,当我尝试加载它时,我得到了这样的消息:
您不能将BlahBlah屏幕保护程序与此版本的MacOSX一起使用。
请与供应商联系以获取新版本的屏幕保护程序。
我目前正在竞选小牛队。这是否意味着Swift屏幕保护程序只能在优胜美地工作,甚至不在那里?
这是我用来替换Objetive-C的Swift代码:
import Foundation
import ScreenSaver
class BlahBlahView : ScreenSaverView {
convenience override init() {
self.init(frame: CGRectZero, isPreview: false)
}
override init(frame: NSRect, isPreview: Bool) {
super.init(frame: frame, isPreview: isPreview)
setAnimationTimeInterval(1.0 / 30.0)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func startAnimation() {
super.startAnimation()
}
override func stopAnimation() {
super.stopAnimation()
}
override func drawRect(rect: NSRect) {
super.drawRect(rect)
}
override func animateOneFrame() {
}
override func hasConfigureSheet() -> Bool {
return false
}
override func configureSheet() -> NSWindow? {
return nil
}
}
这些是我的项目设置:
这最初是在MacOSX 10.9上创建的Objective-C项目(没有Swift Screensaver模板),我使用的屏幕保护程序已经存在多年。
答案 0 :(得分:13)
要在Mac OS X 10.9上使用Swift编写的屏幕保护程序,请将项目设置嵌入式内容包含Swift代码设置为是。
在代码级别,它将被视为两行:
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
在project.pbxproj文件中。
答案 1 :(得分:2)
检查项目设置的“OS X部署目标”。它可能默认为您的开发机器运行的任何操作系统,但请仔细检查。如果要支持10.9,则必须将此设置更改为10.9:
此外(这不过是其他任何事情),无论您使用何种部署目标,您都可以在代码中包含10.10 API。因此,您还需要检查您正在调用的任何Cocoa方法的文档,以确保它们不是特定于10.10。除非你使用更新的功能,否则这是不太可能的,但也要记住这一点。
答案 2 :(得分:1)
是的,Swift可以在OS X 10.9上运行,但不能提前运行。
我将屏幕保护程序移植到Swift时遇到了一些问题,主要是因为标题尚未“现代化”以使用Objective C 2.0。因此,getter和setter不会使用@property
声明。