无法分配属性:' xxxx'是一个只获得房产

时间:2017-05-21 19:29:05

标签: swift computed-properties

我使用计算属性来获取books数组中的最后一本书。但是,我似乎无法使用此属性直接设置图书的position属性,正如我在下面的尝试所示:

struct Book {
    var position: CGPoint?
}

class ViewController: UIViewController {

    var books = [Book]()

    var currentBook: Book {
        return books[books.count - 1]
    }

    func setup() {
        // Compiler Error: Cannot assign to property: 'currentBook' is a get-only property
        currentBook.position = CGPoint.zero
    }
}

以下有效,但我希望更易读。

books[books.count - 1].position = CGPoint.zero

我可以使用函数返回当前的书,但使用属性会更干净。还有另一种方式吗?

1 个答案:

答案 0 :(得分:8)

发生错误是因为如果currentBook的值发生变异,您没有告诉编译器该怎么做。编译器假定它是不可变的。

只需添加一个setter,以便编译器在设置值时知道该怎么做:

var currentBook: Book {
    get { return books[books.count - 1] }
    set { books[books.count - 1] = newValue }
}

或者,请考虑使用books.last!

books.last!.position = CGPoint.zero