Swift 将对象的属性设置为 nil

Swift setting object's properties to nil

我是 Swift 的新手,我遇到了一个问题。

我的问题很简单:

我有一个简单的 class,里面有一些对象(在他们自己的文件中声明):

class Outcome : NSObject {
   var foo : SomeClass? 
   var doo : OtherClass?
   var roo: AnotherClass?

}

我想做的是当设置了class的一个对象时,将所有其他对象设置为nil,所以我使用了didSet特性并添加了一个resetData应该将所有对象设置为 nil 的方法,除了我刚刚设置的对象。

class 看起来像这样:

    class Outcome : NSObject {
       var foo : SomeClass? {
    didSet { self.resetData(exeption: foo!) }
       var doo : OtherClass? {
           didSet { self.resetData(exeption: doo!) }
      }
       var roo: AnotherClass? {
            didSet { self.resetData(exeption: roo!) }
       }

    func resetData (exeption: AnyObject) {

    var allObjects = NSArray(array: [self.foo ?? NSNull(), self.doo ?? NSNull(), self.roo ?? NSNull()])

    for var anObject in (allObjects as NSArray as! [NSObject?]) {
        if exeption.isEqual(anObject) == false  {
            anObject = nil 
        }
    }
   }    
 }

resetData 方法的想法是将所有对象设置为 nil 除了异常(这是我刚刚在我的视图控制器中设置的对象)

代码正常,指令anObject = nil被执行,但问题是当我设置一个set a beakpoint时我可以清楚地看到对象不是nil,所以这确实不做我想做的事。

我觉得是引用的问题,我不是很懂,能不能给nil设置一个对象?有一个更好的方法吗 ?

如评论中所述,您的循环不会修改 class 属性,只有 anObject 循环变量。

如果打算定义一个包含 实例的类型 SomeClass的实例 OtherClass的实例 AnotherClass 那么 enum 会是更好的选择:

enum Outcome {
    case foo(SomeClass)
    case doo(OtherClass)
    case roo(AnotherClass)
}

用法示例:

var outCome = Outcome.foo(SomeClass())
print(outCome) // foo(<SomeClass: 0x1009000b0>)
// ...

outCome = .doo(OtherClass())
print(outCome) // doo(<OtherClass: 0x100d00540>)