swift - 如何使用 Swift 协议(protocol)设置 iTunes ScriptingBridge 的属性

标签 swift macos itunes scripting-bridge

我想使用 iTunes ScriptingBridge 框架在 Swift 2.3/3 中设置轨道的评级。我的 Swift iTunes header 协议(protocol)定义如下(完整 header here ):

@objc protocol iTunesTrack: iTunesItem {
    @objc optional var album: NSString {get set}
    @objc optional var albumArtist: NSString {get set}
    @objc optional var rating: Int {get set}
}

extension SBObject: iTunesTrack {}

但是当我尝试设置评级时:

var iTunesApp = SBApplication(bundleIdentifier: "com.apple.iTunes") as! iTunesApplication
var currentTrack = iTunesApp.currentTrack
currentTrack.rating = 10

Xcode 编译器给我这个错误:

Cannot assign to property: 'currentTrack' is inmutable

如何让它可变?我知道此代码在 Objective-C 中有效,但我无法使其在 Swift 中有效,并且它无法使用 Objective-C header 和 Objective-C 桥接 header 。

最佳答案

我在 Objective-C 代码中使用了 setRating 方法,我无法使用 rating 属性来设置评级。

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
[[iTunes currentTrack] setRating:60];

Swift 中与 iTunes.h 文件相同。


这适用于 Swift v2.2:

  • 在您的“iTunes.swift”文件中,您必须添加setRating 函数
  • @objc optional var rating: Int {get}    
    @objc optional func setRating(_: Int)
    

  • Swift 代码:

  •    let iTunesApp = SBApplication(bundleIdentifier: "com.apple.iTunes")  as! iTunesApplication
       let currentTrack = iTunesApp.currentTrack
       currentTrack!.setRating!(10)
    

关于swift - 如何使用 Swift 协议(protocol)设置 iTunes ScriptingBridge 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37994645/

相关文章:

ios - iTunes查找所有屏幕截图版本?

swift - 当应用商店上传新版本时如何向所有用户发送通知?

swift - 在 Swift 中约束一个泛型与另一个泛型

macos - 无法在 ruby​​ 1.9.2 上构建 iconv gem

macos - Mac OSX 上的磁盘队列长度

cordova - 从网络链接启动iTunes时,Phonegap Media Object停止播放

Objective-C Mac OS X 分布式通知 iTunes

ios - 当 UITableView 加载并在滚动后得到修复时,UILabel 向左移动

swift - 获取数组中除 "x"值之外的所有值 Swift 3

c++ - 无法使用 boost.sh 脚本制作的 Boost 框架来制作 cpp-netlib