如何在声明的同一 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
我有两个 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