我一般很新的節目 - 和斯威夫特特別 - 但有一件事我一直在敲打我的腦袋上最近。訪問變量或函數在
我想在一個「父」類來訪問一個變量 - 但我不知道如何到達那裏。
我已經看了看,似乎涵蓋同樣的事情,其他職位 - Access variable in different class - Swift,How to create a global variable?,Access variable in different class - Swift和Pass variables from one ViewController to another in Swift - 但他們都不做的正是我想要的。
我想能夠有一個首選設置窗口,我可以設置並適用於我的'主'類中的變量 - 但我看不到如何從首選項窗口傳遞變量直到'主'級。
下面是我已經在我的第一個視圖控制器,我希望能夠在我的第二個ViewController中進行修改,讓它在第一次更新定義的的NSTextField的例子。我的實際應用程序可能需要許多此類實例,以提供一整套可修改的偏好。
// ViewController.swift
import Cocoa
class ViewController: NSViewController {
lazy var sheet2ViewController: NSViewController = {
return self.storyboard!.instantiateControllerWithIdentifier("sheet2") as! NSViewController}()
@IBAction func openPanel(sender: AnyObject) {
displaySheet()
}
@IBOutlet weak var textField: NSTextField!
var textString : String = "" {
didSet {
textField.stringValue = textString
}
}
func displaySheet() {
self.presentViewControllerAsSheet(sheet2ViewController)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
// SecondViewController.swift
import Cocoa
class SecondViewController: NSViewController {
@IBOutlet weak var textField2: NSTextField!
@IBAction func closeButton(sender: AnyObject) {
???.textString = textField2.stringValue // How to address the ViewController variable here?
self.dismissController(self)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
}
正如你看到的,我有這個問題是在closeButton功能在SecondViewController類 - 如何通過價值回升在的ViewController類的textString變量?
我一直在尋找代表團和NSNotificationCenter - 但我真的不知道我是否在這裏咆哮正確的樹 - 感覺就像我將不得不實施比我更復雜的事情期望這樣的(看似)簡單的要求。
任何建議非常歡迎 - 謝謝。
感謝Vadian - 但是當我嘗試,我得到了錯誤:「實例成員‘presentingViewController SecondViewController‘’’不能在使用類型」。 – Moisie
您正在調用該類型的方法,但必須在實例上調用它,該行必須在方法內。 – vadian
啊!太棒了 - 這個很有用! :-) 謝謝!! – Moisie