如何使用 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];
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)
我想使用 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];
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)