从另一个类被调用的函数中访问变量
我有一个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()
为什么我不能访问值谁能帮我打电话的计算方法?
您还可以定义像这样的全局变量到达其他控制器的变量:
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";
}
//.......
}
我从另一个viewcontroller像这样获得价值http://stackoverflow.com/questions/24222640/passing-data-between-view-controllers-in-swift。所以我只能使用无价值Viewdidload() –
一旦你打电话“[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()
功能http://stackoverflow.com/questions/24072766/accessing-variables-from-another-viewcontroller-迅速 –
尝试使用协议。 –