如何观察和显示价值变化?在斯威夫特 [英] How to observe change of value and show it? In Swift

查看:86
本文介绍了如何观察和显示价值变化?在斯威夫特的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个变量,该变量在另一个类中获取数组中对象的数量,如何跟踪当前类中此变量的变化?我做了很多不同的尝试,但都失败了.

I have a variable that takes the number of objects in the array in a different class, how can I keep track of the change of this variable in the current class? I did a lot of different attempts but failed.

var digitIndex: Int! {
        set {
            self.digitIndex = newValue
        }
        get {
            return firstClass.indexesOfSelectedNodes().count
        }
    }

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        if context == &digitIndex {
            if let newValue = change?[NSKeyValueChangeNewKey] {
                print("newValue")
                infoLabel.text = "\(newValue)"
            }
        }
    }

在您的代码中

推荐答案

1)

var digitIndex: Int! {
        set {
            self.digitIndex = newValue
        }
        get {
            return firstClass.indexesOfSelectedNodes().count
        }
    }

digitIndex是计算属性!您无法在自己的设置器中设置self.digitIndex!

digitIndex is computed property! You are not able to set self.digitIndex within its own setter!

即使编译后,此代码也将永远运行:-)

this code, even though compiled, will run forever :-)

var i: Int {
    get {
        return 10
    }
    set {
        i = newValue
    }
}

i = 100
print(i)

2)如何使用willSet和didSet(用于STORED属性)?

2) How to use willSet and didSet (for STORED properties)?

class C1 {}
class C2 {}

class C {
    var objects: [AnyObject] = [C1(),C1(),C2()] {
        willSet {
            print(objects, objects.count, newValue)
        }
        didSet {
            print(objects, objects.count)
        }
    }
    func add(object: AnyObject) {
        objects.append(object)
    }
}

let c = C()
c.add(C1())
/*
[C1, C1, C2] 3 [C1, C1, C2, C1]
[C1, C1, C2, C1] 4
*/

var i: Int = 0 {
willSet {
    print(newValue, "will replace", i)
}
didSet {
    print(oldValue, "was replaced by", i)
}
}

i = 100
/*
100 will replace 0
0 was replaced by 100
*/

您可以结合使用计算出的属性和存储的属性,以获取优势

you could combine the computed and stored properties for your advantage

// 'private' storage
var _j:Int = 0
var j: Int {
get {
    return _j
}
set {
    print(newValue)
    if newValue < 300 {
    _j = newValue
    } else {
        print(newValue, "refused")
    }
}
}

print(j) // prints 0
j = 200  // prints 200
print(j) // prints 200
j = 500  // prints 500 refused
print(j) // prints 200

这篇关于如何观察和显示价值变化?在斯威夫特的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆