访问从另一个类调用的函数中的变量
Posted
技术标签:
【中文标题】访问从另一个类调用的函数中的变量【英文标题】:Access variable in a function which is called from another class 【发布时间】:2017-04-18 07:19:31 【问题描述】:我有一个 class1,它有很多变量,并且在 class1 中也有一个函数。我正在从另一个类 class2 调用该函数。触发的函数但我无法访问 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()
为什么我无法访问任何人帮助我的价值观?
【问题讨论】:
***.com/questions/24072766/… 尝试使用协议。 【参考方案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)
...
【讨论】:
【参考方案2】:实际上,“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";
//.......
【讨论】:
我正在从另一个像 ***.com/questions/24222640/… 这样的视图控制器中获取价值。所以我只能通过 Viewdidload() 获取价值 一旦你调用了"[self presentViewController:...",viewDidLoad()函数就会被调用,然后变量就可以被初始化了。你在句子“[self presentViewController:...”之后调用了calculation()。【参考方案3】:您试图实现的是一种模型类。我建议你创建一个简单的模型类,它不是 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()
【讨论】:
以上是关于访问从另一个类调用的函数中的变量的主要内容,如果未能解决你的问题,请参考以下文章