我想從ViewController中調用標籤並將其設置在代碼中的不同位置,例如有2個不同的函數,它們都將標籤設置爲可以說「喜」和第2個功能將其設置爲‘你好’Swift協議沒有設置標籤值,也沒有
我用Swift3協議的方式就像這樣:Access label.text from separate class in swift
我在班上另一個初始化,所以我不知道爲什麼它不會設置標籤文字到新的值,但是無。
我首先點擊連接按鈕。
這裏是我的代碼:
protocol HiResponder: class {
func hi()
func hello()
}
class ViewController: UIViewController, HiResponder {
@IBOutlet weak var status: UILabel!
var test: Test!
override func viewDidLoad() {
super.viewDidLoad()
test.responder = self //gives me nil fatal error: unexpectedly found nil while unwrapping an Optional value
}
@IBAction func connectBtn(_ sender: Any) {
self.test = Test(
p1: "hey",
p2: "there"
)
self.test.connect(p1: "hey", p2: "there")
}
func hi() {
status.text = "hi"
}
hello() {
status.text = "hello"
}
}
這是設置這些反應的價值類:我想概括我的代碼
class Test {
var test:TestQQ?
var p1:String?
var p2: String?
weak var responder: HiResponder?
init(p1: String, p2:String) {
self.p1 = p1
self.p2 = p2
}
init(responder: TestResponder) {
self.responder = responder
}
// Connect
func connect(p1:String, p2:String) {
//code
}
func setHello(){
responder?.hello()
}
func setHi(){
responder?.hi()
}
}
但多數民衆贊成這個想法。我的連接功能正在我viewDidload的viewController被調用。
您是否在任何地方設置了responder?您顯示的代碼不會分配「Test」實例並存在其他問題。可以簡化代碼,但應確保代碼是有效的[MCVE],否則我們正在解決示例中的問題,而不是實際的代碼。 – Paulw11
@ Paulw11我沒有在任何地方設置響應者。但我怎麼能?我在哪裏? – fscore
這就是代表團模式的工作原理;當你在你的'ViewController'中創建'Test'的實例時,你設置了'test.responder = self',所以現在'Test'實例有一個引用返回到視圖控制器。 – Paulw11