【发布时间】:2015-08-05 18:29:07
【问题描述】:
在介绍了 Javascript 之后,我正在尝试通过创建一些简单的工具来解决 OSX/iOS 编程问题。
但是,从跳跃开始,我就遇到了障碍。
我找到了两个应该可行的例子。
- https://github.com/hinderberg/ios-swift-kurs/blob/master/swift-intro/wallpaper.swift
- https://www.snip2code.com/Snippet/196825/Swift-shell-script-to-randomize-wallpape
这是第二个:
#!/usr/bin/env xcrun swift
import Foundation
import AppKit
let imagesDir = "/Users/david/Dropbox/Graphics/Wallpaper-HD/"
var err: NSError?
let fs = NSFileManager.defaultManager()
let filenames = fs.contentsOfDirectoryAtPath(imagesDir, error: &err) as [String]?
if let error = err {
NSLog(error.localizedDescription)
} else {
let imagenames = filenames!.filter { $0.hasSuffix(".jpg") || $0.hasSuffix("png") }
let ir = Int(arc4random_uniform(UInt32(imagenames.count)))
let imgurl = NSURL.fileURLWithPath(imagesDir + imagenames[ir])
let workspace = NSWorkspace.sharedWorkspace()
let screen = NSScreen.mainScreen()
let ok : Bool = workspace.setDesktopImageURL( imgurl!, forScreen: screen!, options: nil, error: nil )
if ok {
println( "New wallpaper: " + imagenames[ir] )
} else {
println("Oops!")
}
}
这在 XCode 7 beta 3 中不起作用。
希望减少到要领,我到达:
#!/usr/bin/env xcrun swift
import Foundation
import AppKit
let imagesDir = "/Users/josh/Downloads/"
let singleImage = "/Users/josh/Downloads/xlarge.png"
let imgurl = NSURL.fileURLWithPath(singleImage)
let workspace = NSWorkspace.sharedWorkspace()
let screen = NSScreen.mainScreen()
let ok : Bool = workspace.setDesktopImageURL( imgurl, forScreen: screen!, options: nil, error: nil )
if ok {
print( "New wallpaper set!" )
} else {
print("Oops!")
}
并保存为文件wallpaper.swift。
执行时,错误是:
./wallpaper.swift:17:49: error: extra argument 'error' in call
let ok : Bool = workspace.setDesktopImageURL( imgurl, forScreen: screen!, options: nil, error: nil )
现在我完全被困住了...... 我试过参考NSWorkspace 和NSScreen 文档以及在操场上跑步,但这超出了我目前的技能。
删除它抱怨的额外参数(错误:nil)只会给出不同的错误:
./wallpaper.swift:13:31: error: cannot invoke 'setDesktopImageURL' with an argument list of type '(NSURL, forScreen: NSScreen?, options: nil)'
let ok : Bool = workspace.setDesktopImageURL( imgurl, forScreen: screen, options: nil )
代码在哪里失败,我如何理解如何使其正常工作?
【问题讨论】:
-
不熟悉waith OSX函数,但是从错误来看,你有没有试过从“workspace.setDesktopImageURL”函数中去掉“error: nil”?
-
是的,返回的错误是
./wallpaper3.swift:13:31: error: cannot invoke 'setDesktopImageURL' with an argument list of type '(NSURL, forScreen: NSScreen?, options: nil)' let ok : Bool = workspace.setDesktopImageURL( imgurl, forScreen: screen, options: nil )。 “额外参数”错误似乎是“它坏了,自己弄清楚”错误之一。 -
在 Xcode 中,使用 ALT+CLICK 来查看对象的类型。如果您在
.setDesktopImageURL上执行 ALT+CLICK,Xcode 将显示此方法的类型和签名。然后您将看到必须使用的正确参数(文档可能未更新)。 -
@EricD。这很方便,谢谢。我点击了
.setDesktopImageURL,它说没有快速帮助,但是当我点击命令时,它把我带到了声明处(也很方便,不会想到这一点)。那里的代码是func setDesktopImageURL(url: NSURL, forScreen screen: NSScreen, options: [String : AnyObject]) throws。这对错误的位置更有意义吗?