私は一般的にプログラミングには新しく、特にSwiftには新しくありますが、最近私の頭を叩いてしまったことがあります。'親'クラスの変数や関数へのアクセス
私は '親'クラスの変数にアクセスしようとしていますが、どうやってそこに到達するのかは分かりません。 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を定義した例を示します。これは、2番目のViewControllerで変更して最初に更新できるようにしたいというものです。私の実際のアプリケーションは、変更可能なプリファレンスの完全なセットを提供するために、おそらく多くのそのようなインスタンスを必要とします。
// 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.
}
}
見ての通り、私が持っている問題は、SecondViewControllerクラスでcloseButton機能である - のViewControllerクラスのtextString変数にバックアップ値を渡す方法?
私は代表団とNSNotificationCenterを見てきましたが、ここで適切な木を鳴らしているかどうかは分かりません。私は私よりもはるかに複雑なものを実装する必要があるように感じますそのような(一見)単純な要件を期待する。
非常に歓迎されている提案 - ありがとうございます。
おかげヴァディアン - しかし、私はこれをしようとすると、私はエラーを取得:「インスタンスメンバー 『presentingViewController SecondViewController『』』タイプに使用することはできませんが」。 – Moisie
型のメソッドを呼び出していますが、インスタンス上で呼び出す必要があります。その行はメソッド内にある必要があります。 – vadian
ああ!素晴らしい - これは動作します! :-)ありがとう! – Moisie