获取有关函数调用者的信息

时间:2015-03-10 10:32:04

标签: ios swift delegates

我定义了一个自定义UIView,其中包含UISlider,一些标签和显示逻辑。 我将几个自定义视图放在主Viewcontroller中,并定义了委托来处理MainController中滑块的更新:

CustomView.swift

protocol CustomDelegate {
    func sliderUpdatedWithValue(value:Float)
}

@IBDesignable class CustomView: UIView {

var delegate:CustomDelegate? = nil

@IBAction func updateCustomSlider(sender: UISlider) {
    delegate?.sliderUpdatedWithValue(CustomSlider.value)
}
}

MainViewController.swift

class ViewController: UIViewController, CustomDelegate {
    @IBOutlet weak var cutomView1: CustomView!
    @IBOutlet weak var customView2: CustomView!

    override func viewDidLoad() {
        super.viewDidLoad()
        cutomView1.delegate = self
        cutomView2.delegate = self
    }

    //MARK: - Delegate methods
    func sliderUpdatedWithValue(value:Float) {
        NSLog("Slider Value updated: %f", value)
    }
}

这几乎按预期工作,唯一的问题是,只要任何自定义视图中的滑块发生更改,就会调用sliderUpdatedWithValue(),而我无法确定哪个滑块正在发送值。

当然,向sliderUpdatedWithValue()函数添加另一个参数以包含有关包含视图的信息是微不足道的,但我想知道是否有内置的方法来找出谁调用了定义的函数协议/代表

1 个答案:

答案 0 :(得分:2)

  

当然,在sliderUpdatedWithValue()

中添加另一个参数会很简单

这是正确的行动方案。如果某个方法需要一些可以在参数中传递给它的信息,请添加另一个参数(或修改现有参数以包含更多信息,具体取决于您的设计)。

方法是单向的,因为被叫方只知道呼叫者希望向其透露的内容。在大多数具有函数或方法调用的语言中都是如此,它完全是设计的。

即使在您可以获得有关调用者的一些信息的情况下,例如,通过分析跟踪调用堆栈的数据结构,依靠此结构来决定函数的逻辑也不是一个好主意。