2017-05-21 20 views
1

私はbooks配列の最後の書籍を取得するために計算されたプロパティを使用しています。以下の作品プロパティに割り当てることはできません: 'xxxx'は取得専用プロパティです

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 
    } 
} 

が、私はそれは、単一のラインより読みになりたい:しかし、私が直接ショー以下の私の試みとして、本のpositionプロパティを設定するには、このプロパティを使用することはできませんようです。

私は現在の本を返すために関数を使うことができますが、プロパティを使うとクリーナーになります。別の方法がありますか?

答えて

3

currentBookの値が変更されている場合、コンパイラに何をすべきかを知らせなかったため、エラーが発生します。コンパイラはそれが不変であると仮定します。

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

か、考えるbooks.last!を使用して::コンパイラはあなたが値を設定するときに何をすべきかを知っているように

ちょうどセッターを追加

books.last!.position = CGPoint.zero 
+1

それは一種の奇妙で計算されたプロパティがなければならないので、 'var'として宣言されています... –

関連する問題