如何拥有一个具有getter和默认setter的计算属性?

时间:2016-09-21 16:01:37

标签: swift

这不起作用。 enter image description here

这也不是 enter image description here

这不起作用,因为现在该物业没有制定者。 enter image description here

如何保留自定义getter并设置值而不进行任何计算?

1 个答案:

答案 0 :(得分:1)

首先,以下是解决解决此问题的方法:

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

现在为什么你应该使用这个hack:同一属性的getter和setter应该同意,因为一旦你将它设置为X,getter应该正常给你X回来。你的方法不会这样做。

更好的解决方案是在播放列表项目中查找newValue的索引,并在找到匹配值时设置index

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