我有两个班,类似的东西
class FirstClass {
func returnInt() -> Int {
return (42)
}
}
class SecondClass {
func printInt(myInt: Int) {
print(myInt)
}
}
我想知道是否有可能创建一个协议时的功能 - 的的Firstclass的“returnInt()>诠释”是调用,这样第二类“printInt(智力)”的功能调用。
在现实中,我正在从不同类别的序列化/反序列化包。
我认为是最好的方式,这就是为什么我需要你的帮助。
谢谢
我不知道你的确切用法,但一个方法是使用封闭的,而不是协议。第一类中创建闭包变量,然后调用它返回的值后
class FirstClass {
var valueReturned: ((Int)->Void)?
func returnInt() -> Int {
let value = 42
valueReturned?(value)
return value
}
}
那么地方在那里你有设置两个类的两个实例的引用第一的valueReturned
和内部封说,当这个会叫,你要调用第二的的printInt(myInt:)
并从封闭的参数通过值
firstClass.valueReturned = { value in // assign parameter of closure
self.secondClass.printInt(myInt: value)
// self.printInt(myInt: value)
}
无论如何,如果你想使用的协议,你需要委托模式。
开始宣布协议
protocol FirstClassDelegate: class {
func printInt(myInt: Int)
}
然后创建委托上第一类和呼叫方法内委托变量应返回值之后
class FirstClass {
weak var delegate: FirstClassDelegate?
func returnInt() -> Int {
let value = 42
delegate?.printInt(myInt: value)
return value
}
}
现在,实现这一委托协议,以第二课堂,设置delegate
一些一流的实例作为self
财产
class SecondClass {
var firstClass = FirstClass()
init() {
firstClass.delegate = self
}
}
extension SecondClass: FirstClassDelegate {
func printInt(myInt: Int) {
print(myInt)
}
}
这应该这样做:
class FirstClass {
weak var firstClassToSecondClassCommunicatorDelegate: FirstClassToSecondClassCommunicator?
func returnInt() -> Int {
let myInt = 42
if firstClassToSecondClassCommunicatorDelegate != nil {
firstClassToSecondClassCommunicatorDelegate?.printInt(myInt: myInt)
}
return myInt
}
}
class SecondClass: FirstClassToSecondClassCommunicator {
func printInt(myInt: Int) {
print(myInt)
}
}
class myVC: UIViewController {
override func viewDidLoad() {
let firstClass = FirstClass()
let secondClass = SecondClass()
firstClass.firstClassToSecondClassCommunicatorDelegate = secondClass
}
}
protocol FirstClassToSecondClassCommunicator {
func printInt(myInt: Int)
}
在二等初始化你的类:
init(fromFirstClass returnInt: Int) {
....
}