gpt4 book ai didi

macos - 使用 Swift 2 在 OSX 上设置桌面背景

转载 作者:搜寻专家 更新时间:2023-11-01 05:34:23 24 4
gpt4 key购买 nike

在介绍了 Javascript 之后,我试图通过创建一些简单的工具来解决 OSX/iOS 编程问题。

但是,从一开始我就遇到了障碍。

我找到了两个应该有效的示例。

  1. https://github.com/hinderberg/ios-swift-kurs/blob/master/swift-intro/wallpaper.swift
  2. 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 )

现在我完全卡住了......我试过引用 NSWorkspaceNSScreen文档以及在 Playground 上奔跑,但这超出了我目前的技能范围。

删除它提示的额外参数(错误: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 )

代码哪里出错了,我怎样才能理解如何让它正常工作?

最佳答案

在您的示例中,您将 nil 作为 options 传递给该方法。

我猜它以前有效,但现在在评论中显示了当前方法签名:

(url: NSURL, forScreen screen: NSScreen, options: [String : AnyObject]) throws

我们看到 options 应该是一个非可选字典。

这意味着您不能再对options 参数使用nil:如果您没有选项,只需传递一个空的Dictionary。

此外,现在在 Swift 2 中,此方法不再返回 Bool,而是抛出异常。

意味着你必须将它与 do try catch 一起使用:

do {
let imgurl = NSURL.fileURLWithPath(singleImage)
let workspace = NSWorkspace.sharedWorkspace()
if let screen = NSScreen.mainScreen() {
try workspace.setDesktopImageURL(imgurl, forScreen: screen, options: [:])
}
} catch {
print(error)
}

关于macos - 使用 Swift 2 在 OSX 上设置桌面背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44439891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com