如何使用 Swift 协议设置 属性 iTunes ScriptingBridge

How to set a property of iTunes ScriptingBridge using Swift protocols

我想使用 iTunes ScriptingBridge 框架在 Swift 2.3/3 中设置曲目的评级。我有 Swift iTunes header 协议定义如下(完整 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];

SwiftiTunes.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)