2016-06-23 5 views
3

iTunes ScriptingBridge 프레임 워크를 사용하여 Swift 2.3/3에서 트랙의 등급을 설정하고 싶습니다. 나는이 같은 프로토콜 정의와 스위프트 아이튠즈 헤더이 (전체 헤더here) :Swift 프로토콜을 사용하여 iTunes ScriptingBridge의 속성을 설정하는 방법

@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 

엑스 코드 컴파일러 나이 있습니다 오류 :

Cannot assign to property: 'currentTrack' is inmutable 

어떻게 변경할 수 있습니까? 이 코드는 Objective-C에서 작동하지만 Swift에서 작동하도록 만들 수는 없으며 Objective-C 헤더와 Objective-C Bridging Header를 사용하여 작동하지 않습니다.

답변

2

Objective-C 코드에서 setRating 메서드를 사용하면 rating 속성을 사용하여 등급을 설정할 수 없습니다. iTunes.h 파일을 스위프트에서 동일

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

.


이것은 스위프트 2.2에서 작동합니다 : 당신의 "iTunes.swift"파일에서

  • , 당신은 setRating 기능을 추가해야합니다
  • @objc optional var rating: Int {get}  
    @objc optional func setRating(_: Int) 
    

  • 스위프트 코드 :

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

오, 완벽한. 고맙습니다! – pvieito