2017-08-01 99 views
0

讓我以此爲序,我很少理解swift(昨天剛剛通過這個項目)。我試圖在Xcode8.3.3Swift 3.1Swift 3.1不能分配給屬性:'b0'是一個只能得到的屬性

中重現構建我修復了一些編譯源問題和一些其他類相關的錯誤。我遇到了只讀屬性錯誤。

var cloudUse : F2Type32 = 0x1; 
var anyCloudUse : Bool { 
    get { 
     return (cloudUse != 0) ? true : false 
    } 
} 
var iCloudUse : Bool { 
    get { 
     return cloudUse.b0 
    } 
    set(newValue) { 
     cloudUse.b0 = newValue //error. Cannot assign to property: 'b0' is a get-only property 
    } 
} 
var googleDriveUse : Bool { 
    get { 
     return cloudUse.b1 
    } 
    set(newValue) { 
     cloudUse.b1 = newValue //error. Same as above 
    } 
} 

我看着這個get-only property。但似乎無法弄清楚發生了什麼。

b0b1如下

extension VInt { 
      func maxSize() -> UIntMax { return self.asU64 } 
      init(_ val : Int) { 
        if (val > 0) {self.init(UIntMax(val)) } 
      else { 
        self.init(UIntMax(val&0x7fffffff)) } } 
      init(fromMax : UIntMax) { self.init(fromMax) } 
      init<T2 : VInt>(val : T2) { self.init(fromMax : val.asMaxSize) } 
      var b0 : Bool { 
       return ((self & 0x1) == 0) ? false : true} 
      var b1 : Bool { 
       return ((self & 0x2) == 0) ? false : true} 
+0

顯示F2Type32聲明 – antonsergeev88

+0

'的typedef uint32_t的F2Type32;'@ antonsergeev88 – DJ2

+0

看起來你需要位掩碼,嘗試一些更SWIFTY https://stackoverflow.com/questions/24059485/how-to-create-bitmask-in-swift – antonsergeev88

回答

2

定義這是我在一個固定的第一次嘗試。延長目前只有一個getter,所以我們將編輯延長到線替換到這樣的事情:

var b0 : Bool { 
    get {return ((self & 0x1) == 0) ? false : true} 
    set {self = newValue ? self & 0x1 : self^0x1} 
} 

var b1 : Bool { 
    get {return ((self & 0x2) == 0) ? false : true} 
    set {self = newValue ? self | 0x2 : self^0x2} 
} 

希望我得到的東西bitset的權利(這不是我的強項)。

相關問題