2017-04-18 127 views
-2

我有一個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

嘗試使用協議。 –

回答

1

您還可以定義像這樣的全局變量到達其他控制器的變量:

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) 
... 
} 
1

其實,「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()。 –

0

你試圖實現的是一種模型類。我建議你創建一個簡單的模型類,它不是像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() 
相關問題