如下圖所示,我想通過upVote函式上傳我的vote金庫,但是出現了錯誤,"無法分配給屬性:'vote'是一個只獲取的屬性"。
除了vote和'isFavored'之外,其他屬性都是從本地JSON檔案中解碼的。
我的結構
。
struct Movie:Codable,Identifiable{
let id=UUID()
let MOVIE_ID: String
let NAME:String
let ALIAS: String
let ACTORS: String
let COVER:String
let DIRECTORS: String
let DOUBAN_SCORE: String
let DOUBAN_VOTES:String
let GENRES: String
let IMDB_ID: String
let LANGUAGES: String
letDIRECTOR_IDS:String
屬于我自己的財產。
var isFavered:Bool = false
init the vote
var vote:Int{
if let v = Int(DOUBAN_VOTES) {
return v
}else{
return 0
}
}
enum CodingKeys: String, CodingKey {
case MOVIE_ID, NAME, ALIAS, ACTORS,COVER,DIRECTORS,DOUBAN_SCORE。
case DOUBAN_VOTES,GENRES。 IMDB_ID,LANGUAGES,MINS,OFFICIAL_SITE。
case REGIONS,RELEASE_DATE, SLUG, STORYLINE,TAGS,YEAR,ACTOR_IDS,DIRECTOR_IDS。
}
my uploade vote function
func upVote(newVote:Int){
vote = newVote />這里發生了錯誤。
}
uj5u.com熱心網友回復:
你首先需要將DOUBAN_VOTES宣告為可變,然后將計算的屬性改為可變。通過對DOUBAN_VOTES使用private(set),它在結構外將是不可變的。
private(set) var DOUBAN_VOTES: String
var vote: Int {
get {
return Int(DOUBAN_VOTES) ? ? 0
}
set {
DOUBAN_VOTES = String(newValue)
}
}
uj5u.com熱心網友回復:
你有兩個問題。
首先,正如你已經發現的,你不能修改vote,因為它是一個computed屬性。 它的值是由其getter方法中的代碼決定的。 賦值沒有意義。
我猜你使用了一個計算屬性,因為你的JSON源,坦率地說,很糟糕。 整數應該作為整數發送,而不是字串。
假設你不能將JSON改成更合理的東西,那么你只需要在你的upVote函式中更新基礎的DOUBAN_VOTES屬性。 你將需要使DOUBAN_VOTES成為一個var,而不是一個let。
這將揭示你的第二個問題;結構體是不可變的。為了允許一個函式改變一個值,它必須被標記為一個mutating函式。
。
var DOUBAN_VOTES: String
mutating func upVote(newVote: Int) {
self.DOUBAN_VOTES = "(newVote)"。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/321923.html
標籤:
