2017-08-01 98 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的权利(这不是我的强项)。

相关问题