我想使用 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/