了解Swift文件之间的交互 ​​- 如何从一个文件调用另一个

时间:2016-07-19 21:34:59

标签: ios iphone swift uiviewcontroller viewcontroller

我的ViewController.swift是应用程序加载时第一个运行的。然后我转到另一个SecondViewController.swift文件。

ViewController.swift实例仍然存在,对吗?

现在,从SecondViewController.swift,我调用ViewController()。someFunction()

ViewController" viewDidLoad"没有被调用,只有我专门调用的函数。

现在:如果我在ViewController.swift中实例化一个Int变量" var testNum = 2"在ViewController的viewDidLoad中,我将其值更改为14.然后我转到SecondViewController。然后我调用ViewController()。someFunction()并在该函数中打印testNum的值,我得到的实例化值为2而不是ViewController的值为14,这让我相信我'通过以这种方式调用函数,我创建了一个新的ViewController副本。

是吗?那是我做过的吗?如果是这样,有没有办法在现有的ViewController中调用函数,而不是从SecondViewController.swift中创建一个新的ViewController?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

我的ViewController.swift是应用程序加载时第一个运行的。然后我转到另一个SecondViewController.swift文件。

挑剔:你不会在文件之间进行隔离,而是在这些文件中定义的类的实例之间进行区分。

  

ViewController.swift实例仍然存在,对吗?

是。好吧,该文件中定义的类的原始实例,见上文。

  

现在,从SecondViewController.swift,我调用ViewController()。someFunction()

     

ViewController" viewDidLoad"没有被调用,只有我专门调用的函数。

使用ViewController()创建ViewController类的新实例,然后直接在其上调用该方法。这并没有多大意义。

  

现在:如果我在ViewController.swift中实例化一个Int变量" var testNum = 2"在ViewController的viewDidLoad中,我将其值更改为14.然后我转到SecondViewController。然后我调用ViewController()。someFunction()并在该函数中打印testNum的值,得到实例化值2

当您调用ViewController()时,您将创建ViewController.swift中定义的类的 new 实例。非常(非常)可能这不是你想要做的。 看来你宁愿挂在那个VC的原始实例上。所以你需要在做segue时转移它。

我确定你已经阅读了View Controller Programming Guide for iOS,对吧? ;-)这是一个相关的部分:

  

源视图控制器的prepareForSegue:sender:方法允许您将数据从源视图控制器传递到目标视图控制器。传递给方法的UIStoryboardSegue对象包含对目标视图控制器的引用以及其他与segue相关的信息。

通常你不想保留对原始视图控制器的引用,而是将相关数据传输到你所分割的VC中(以解耦它们)。

答案 1 :(得分:0)

如果您要存储值,我建议您创建一个模型类。

https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

这将保持数据独立于控制器,因为要回答你的" ViewController.swift实例仍然存在,对吗?"问题,取决于记忆,它可能存在也可能不存在。这就是为什么创建一个模型是可取的,因为那时你并不担心它。

如果您喜欢示例,如果您使用谷歌MVC iOS,那么网上有很多。希望有所帮助。