2016-09-21 6 views
-3

これは動作しません。 enter image description heregetterとデフォルトセッターを持つ計算されたプロパティを持つには?

もこの enter image description here

を行い、今、宿泊施設にはセッターを持っていないので、これは動作しません。 enter image description here

私はカスタムゲッターを保持し、計算なしで値を設定しますか?ゲッターと同じプロパティのセッターに同意しなければならないで、:あなたはない使用このハックはすべき理由今

// THIS IS BAD, DO NOT DO IT LIKE THAT: 
private var _currTrack : MPMediaItem? 
var currentTrack : MPMediaItem? { 
    get { return playlist?.items[index] } 
    set { _currTrack = newValue } 
} 

+4

画像のコードブロックとしてコードを投稿し、そしてませんしてください。また、[Swift言語ガイド - プロパティ](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html)の_computed_(格納されていない!)プロパティを読み上げてください。 – dfri

+0

計算された変数にはバッキングストアがありません。 'private var _currentTrack'インスタンスを作成します。 setterで '_currentTrack = newValue'をセットし、ゲッターでそれを返します。 – HAS

+1

HAS ...それは答えです...なぜあなたはそのように投稿しませんでしたか? – Aaronium112

答えて

1

まず、こここの問題を回避仕事を解決する方法でありますあなたがXに設定すると、getterは通常Xを返してくれるはずです。あなたのアプローチはそれをしません。

より良い解決策は、プレイリストの項目間newValueのインデックスを探すためにも、と一致する値が見つかった場合indexを設定します:

var currentTrack : MPMediaItem? { 
    get { 
     return playlist?.items[index] 
    } 
    set { 
     if let tmp = playlist?.items.indexOf(newValue) { 
      index = tmp 
     } 
    } 
} 
関連する問題