我有一个简单的问题,我很难找到答案二。下面的代码崩溃了。从调试它似乎来自一个循环,我认为这是因为我引用了两个类中的其他类。有人可以解释一下发生了什么,如果可能,请说明我如何让两个课程相互交谈(两种方式)?任何帮助将非常感谢!谢谢。
查看Controller One
import UIKit
class ViewControllerOne: UIViewController{
let doSomething = DoSomething()
var one = "test"
@IBAction func buttonTapped(sender: AnyObject) {
doSomething.functionTwo()
}
}
做点什么此崩溃
import UIKit
class DoSomething: NSObject {
let viewControllerOne = ViewControllerOne()
func functionTwo() -> String{
var two = viewControllerOne.one
return two
}
}
做点什么这项工作
import UIKit
class DoSomething: NSObject {
func functionTwo() -> String{
let viewControllerOne = ViewControllerOne()
var two = viewControllerOne.one
return two
}
}
答案 0 :(得分:1)
首先,DoSomething
的初始化程序必须创建ViewControllerOne
。由于ViewControllerOne
的初始化程序创建DoSomething
,因此它们无限循环。
在第二个实例中DoSomething
在调用functionTwo()
之前不会创建,因此没有循环。
你可以让他们互相交谈,例如:
import UIKit
class ViewControllerOne : UIViewController
{
let doSomething = DoSomething()
var one = "test"
override func viewDidLoad()
{
super.viewDidLoad()
doSomething.viewControllerOne = self
}
@IBAction func buttonTapped(sender: AnyObject)
{
doSomething.functionTwo()
}
}
class DoSomething: NSObject
{
weak var viewControllerOne : ViewControllerOne?
func functionTwo() -> String
{
return viewControllerOne?.one ?? String()
}
}
-
所以这就是它的步骤:
self
与其他语言中的this
类似functionTwo
时,它返回值one
或者如果viewControllerOne为nil则返回空字符串答案 1 :(得分:0)
课程从不说话。它们是蓝图。
您的意思是需要进行通信的类的实例。两种方式: 每个实例都有对另一个实例的引用 或实例将消息发送到充当postmaster的第三个对象。有关如何在应用程序内进行通信而不通过引用了解其他对象的详细信息,请参阅NSNotification。