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

标签 ios swift delegates

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

自定义 View .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)
    }
}

这几乎按预期工作,唯一的问题是每当任何自定义 View 中的 slider 发生更改时都会调用 sliderUpdatedWithValue() 并且我无法判断哪个 slider 正在发送值.

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

最佳答案

Of course it would be trivial to add another parameter to the sliderUpdatedWithValue()

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

方法是单向的,从某种意义上说,被调用者只知道调用者希望向它透露的内容。在大多数具有函数或方法调用的语言中都是如此,这完全是设计使然。

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

关于ios - 获取有关函数调用者的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961356/

相关文章:

jquery - iScroll 自动循环?

c# - 注入(inject)通用的 getter 和 setter 以获得比反射更好的性能

c# - 为什么要在这里使用 BeginInvoke?

ios - Swift 函数调用中的隐式类型

ios - 如何在列表中搜索具有特定属性的对象的索引?

ios - 当另一个警报出现时,alertview 关闭

ios - 模型在 Storyboard场景中粘在目标上

ios - AppStore 应用价格

python - Windows.screenshot 在 iOS 上返回黑屏

ios - 当我长按 UITableView 自定义标题单元格时应用程序崩溃