无法赋值给属性:'xxxx' 是只读属性

22

我正在使用计算属性来获取我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个回答

28

出现这个错误是因为您没有告诉编译器如果 currentBook 的值被改变应该做什么。编译器默认它是不可变的。

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

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

或者,考虑使用books.last!

books.last!.position = CGPoint.zero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接