2014-10-19 125 views
1

的方法財產在斯威夫特,我試圖做到以下幾點:無法分配在結構

struct Foo { 
    var bar = 1 

    func baz() { 
     bar = 2 
    } 
} 

Xcode的報告錯誤Cannot assign to 'bar' in self上的方法就行了。

爲什麼?如果我將結構更改爲類,則沒有錯誤。

+2

[Swift and mutating struct]可能的重複(http://stackoverflow.com/questions/24035648/swift-and-mutating-struct) – shf301 2014-10-19 04:21:56

+0

你說得對,那是一個更好的問題和答案。 – dpassage 2014-10-19 04:46:57

回答

9

如果要修改結構的屬性,請將該函數標記爲變異。

struct Foo { 
    var bar = 1 

    mutating func baz() { 
     bar = 2 
    } 
} 
2

你不能從結構本身中分配結構變量的原因是因爲結構的實例方法不能改變實例變量。爲此,您需要在函數聲明之前添加關鍵字mutating。

這會給你下面的代碼:

struct Foo { 
    var bar = 1 

    mutating func baz() { 
     bar = 2 
    } 
} 

功能巴茲()現在將能夠變異結構體的實例變量。