如何在声明的同一 class 中的不同方法中使用委托检索的变量

How to use a variable retrieved by a delegate in a different method within the same class it was declared

我有两个 classes,A 和 B: 在 class A 中,我有一个变量,每当满足某个条件时,它的值就会递增 1。在 class B 中,我希望能够访问我通过实施委托管理的那个变量的值(通过实施断点,我可以看到 "valueRetrieved" 持有正确的值)。

我的问题是如何将 valueRetrieved 和 return 用作 int。我尝试创建一个不同的方法并调用 valueRetrieved 但我只得到 0 作为值。原因是因为我希望将该值链接到我的 ViewController 中的 UILabel。任何帮助将不胜感激,如果这是错误的方法,请告诉我。

protocol valueDelegate: class {
    func retrieveValue -> Int    
}

class B {
    var valueRetrieved = 0
    var valueToIncrement = 0
    weak var delegate: valueDelegate?

    func callToValueRetrieved() {
        valueRetrieved = (self.delegate?.retrieveValue())!
        if valueRetrieved == 6{
            valueToIncrement += 1
        }

    func toUseValueIncremented -> Int{
        //would want to return the final valueToIncrement as a int here
return""
    }

Class一个

class A: valueDelegate{
    func retrieveValue() -> Int {
        return valueToDelegate
    } 
}

var valueToDelegate:Int = 0
var bClass: B = B()

func ready() -> Bool {
    if //condition{
        valueToDelegate += 1
        bClass.delegate = self
        bClass.callToValueRetrieved()
        return true
    }

不要使用 retrieveValue() 作为函数的协议,而是使用下面的变量

protocol valueDelegate: class { var valueToDelegate: Int { get } }

因此您可以轻松地访问变量 self.delegate.valueToDelegate 甚至更新它。

我会反过来

protocol ValueDelegate: class {
    func didSetValue(value: Int)
}

class A {

    var valueToBeSent = 0
    weak var delegate: ValueDelegate?

    func ready() -> Bool {
        if true {
            valueToBeSent += 1
            delegate?.didSetValue(value: valueToBeSent)
            return true
        }
    }
}

class B: ValueDelegate {

    var valueToIncrement = 0

    func didSetValue(value: Int) {
        valueToIncrement = value
        print("value has changed: \(value)")
    }

    var myInstanceOfA = A()

    init() {
        myInstanceOfA.delegate = self
    }

    func testThatValueIsReturned() {
        // use the returned Bool as you intend to
        _ = myInstanceOfA.ready()
    }
}

var myInstanceOfB = B()

myInstanceOfB.testThatValueIsReturned() // value has changed: 1

myInstanceOfB.testThatValueIsReturned() // value has changed: 2