我是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
,除了异常(我刚在视图控制器中设置的对象)
代码正在运行并执行指令anObject = nil
,但问题是当我设置一个beakpoint时我可以清楚地看到该对象不是nil
,所以这不做我想要的是。
我认为这是一个参考问题,我真的不明白,是否可以将对象设置为ni
l?有一个更好的方法吗 ?
答案 0 :(得分:2)
如评论中所述,您的循环不会修改类
属性,只有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>)
用法示例:
AndroidRuntime: FATAL EXCEPTION main
java.lang.IllegalArgumentException: View:DecorView@fbad[Starting Verification Process] not attached to window manager