gpt4 book ai didi

ios - Swift 将对象的属性设置为 nil

转载 作者:搜寻专家 更新时间:2023-11-01 07:11:01 26 4
gpt4 key购买 nike

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

我的问题很简单:

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

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

}

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

这个类看起来像这样:

    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 除了异常(这是我刚刚在我的 View Controller 中设置的对象)

代码正在运行,指令 anObject = nil 被执行,但问题是当我设置一个 set a beakpoint 时,我可以清楚地看到对象不是 nil,所以这不符合我的要求。

我认为这是一个引用问题,我不太明白,是否可以将对象设置为 nil ?有一个更好的方法吗 ?

最佳答案

如评论中所述,您的循环不会修改类属性,只有 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>)

关于ios - Swift 将对象的属性设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com