在从另一个类中调用的函数中访问variables

我有一个class1,它有很多variables,也有一个类中的一个函数。我从另一个类class2.function调用函数触发,但我不能访问class1的variables。

这里是示例代码

class ViewController: UIViewController { var Flat:String? var Flong:String? var Tlat:String? var Tlong:String? override func viewDidLoad() { super.viewDidLoad() Flat = "flat value"; Flong="flong value"; Tlat="Tlat value"; Tlong="tlong value"; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func calculation() { print("origin_lat new\(Flat)") print("origin_lng new\(Flong)") print("dest_lat new\(Tlat)") print("dest_lng new\(Tlong)") } } 

我从另一个类Collectionviewcell点击函数调用计算方法

 var mycontroller : ViewController = ViewController() mycontroller.calculation() 

为什么我不能访问任何人帮助我的价值?

您也可以通过像这样定义全局variables来访问其他控制器的variables:

 class Class1ViewController: UIViewController { struct GlobalVariables{ static var Flat:String? static var Flong:String? static var Tlat:String? static var Tlong:String? } override func viewDidLoad() { super.viewDidLoad() Flat = "flat value"; Flong="flong value"; Tlat="Tlat value"; Tlong="tlong value"; } ... } 

你可以在另一个视图控制器中使用这些variables:

 class Class2ViewController: UIViewController { ... print(Class1ViewController.GlobalVariables.Flat) print(Class1ViewController.GlobalVariables.Flong) print(Class1ViewController.GlobalVariables.Tlat) print(Class1ViewController.GlobalVariables.Tlong) ... } 

实际上,不调用“viewDidLoad()”函数。 当你显示viewController的时候,它会被调用,例如,一个UINavigationController推送它。 在你的情况下,你只是创build了viewController,没有显示它。 如果你想在不显示viewController的情况下初始化这些variables,你需要这样做:

 class ViewController: UIViewController { var Flat:String? var Flong:String? var Tlat:String? var Tlong:String? required init?(coder:NSCoder) { super.init(coder:coder) self.customInit() } override init(nibName: String?, bundle: Bundle?) { super.init(nibName: nibName, bundle: bundle) self.customInit() } func customInit() { Flat = "flat value"; Flong="flong value"; Tlat="Tlat value"; Tlong="tlong value"; } //....... } 

你试图达到的是一种模范课。 我build议你创build一个不是UIViewcontroller的子类的简单模型类,就像这样。

 class Model: NSObject { var fLat: String? var fLong: String? var tLat: String? var tLong: String? override init() { super.init() fLat = "flat value" fLong = "flong value" tLat = "tlat value" tLong = "tlong value"; } // for print I have forced unwrapped so remember to check before force unwrapping smi)e func calculation() { print("orgin_lat new\(fLat!)") print("origin_lng new\(fLong!)") print("origin_lat new\(tLat!)") print("origin_lng new \(tLong!)") } } 

现在在你的主视图控制器中,你可以像这样初始化和调用函数

 let model = Model() model.calculation()