从另一个类被调用的函数中访问变量

问题描述:

我有一个class1,它有很多变量,并且在一个类中也有一个函数。我从另一个类class2.function调用该函数,但是我无法访问变量class1的。从另一个类被调用的函数中访问变量

这里是示例代码

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() 

为什么我不能访问值谁能帮我打电话的计算方法?

+0

功能http://stackoverflow.com/questions/24072766/accessing-variables-from-another-viewcontroller-迅速 –

+0

尝试使用协议。 –

您还可以定义像这样的全局变量到达其他控制器的变量:

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"; 
    } 
    ... 
} 

而且你可以在另一个视图控制器使用这些变量:

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

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

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"; 
    } 

    //....... 
} 
+0

我从另一个viewcontroller像这样获得价值http://stackoverflow.com/questions/24222640/passing-data-between-view-controllers-in-swift。所以我只能使用无价值Viewdidload() –

+0

一旦你打电话“[self presentViewController:...”,将调用viewDidLoad()函数,然后可以初始化变量。你在句子“[self presentViewController:...”后面调用calculate()。 –

你试图实现的是一种模型类。我建议你创建一个简单的模型类,它不是像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()