Swift - 在不知道 class 名称的情况下更改另一个视图控制器中的变量?
Swift - change variable in another view controller, without knowing the class name?
假设我在 viewController1 中有一个函数,它会更改调用该函数的视图控制器中的变量(在本例中为 viewController2)
我一直在尝试的 -
正在 viewController1 中声明函数:
func changeVariable(controller: UIViewController) {
controller.variable = "Hello"
}
从 viewController2 调用函数:
changeVariable(self)
然而,这在声明函数时给我一个错误,告诉我 UIViewController 没有名为 'variable' 的成员。
如果我再将函数更改为:
func changeVariable() {
viewController2.variable = "Hello"
}
有效。但是,我事先不知道哪个视图控制器正在调用函数(例如,它可能是 viewController3),所以我不能在函数中明确说明。
有谁知道我该怎么做?
非常感谢。
这就是协议的用途:当您不想共享它们的确切名称时,在 class 之间定义一种通用语言。
您可以定义描述 variable
字符串的 CommonVariable
协议:
protocol CommonVariable: class {
var variable: String { get set }
}
然后编辑您的 ViewController2
定义以符合此协议:
class ViewController2: UIViewController, CommonVariable {
var variable = ""
}
并编辑您的 ViewController1
方法以接受 CommonVariable
作为参数:
class ViewController1: UIViewController {
func changeVariable(controller: CommonVariable) {
controller.variable = "Hello"
}
}
现在这个方法对 controller
一无所知,除了它是一个 class 和一个名为 variable
.
的字符串
因此,您将能够在不知道 class 名称的情况下从 ViewController2
调用方法:
func someFunc() {
viewController1.changeVariable(controller: self)
}
附带说明一下,CommonVariable
、variable
、ViewController1
和 ViewController2
都是坏名字。不确定您是否真的在使用这些名称,但您应该以更具描述性的名称为目标。
假设我在 viewController1 中有一个函数,它会更改调用该函数的视图控制器中的变量(在本例中为 viewController2)
我一直在尝试的 -
正在 viewController1 中声明函数:
func changeVariable(controller: UIViewController) {
controller.variable = "Hello"
}
从 viewController2 调用函数:
changeVariable(self)
然而,这在声明函数时给我一个错误,告诉我 UIViewController 没有名为 'variable' 的成员。
如果我再将函数更改为:
func changeVariable() {
viewController2.variable = "Hello"
}
有效。但是,我事先不知道哪个视图控制器正在调用函数(例如,它可能是 viewController3),所以我不能在函数中明确说明。
有谁知道我该怎么做?
非常感谢。
这就是协议的用途:当您不想共享它们的确切名称时,在 class 之间定义一种通用语言。
您可以定义描述 variable
字符串的 CommonVariable
协议:
protocol CommonVariable: class {
var variable: String { get set }
}
然后编辑您的 ViewController2
定义以符合此协议:
class ViewController2: UIViewController, CommonVariable {
var variable = ""
}
并编辑您的 ViewController1
方法以接受 CommonVariable
作为参数:
class ViewController1: UIViewController {
func changeVariable(controller: CommonVariable) {
controller.variable = "Hello"
}
}
现在这个方法对 controller
一无所知,除了它是一个 class 和一个名为 variable
.
因此,您将能够在不知道 class 名称的情况下从 ViewController2
调用方法:
func someFunc() {
viewController1.changeVariable(controller: self)
}
附带说明一下,CommonVariable
、variable
、ViewController1
和 ViewController2
都是坏名字。不确定您是否真的在使用这些名称,但您应该以更具描述性的名称为目标。