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

时间:2016-06-23 14:33:07

标签: swift macos itunes scripting-bridge

我想使用iTunes ScriptingBridge框架在Swift 2.3 / 3中设置曲目的评级。我有Swift iTunes 标题,协议定义为此(完整标题 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头和Objective-C桥接头。

1 个答案:

答案 0 :(得分:2)

我在 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)