获取有关函数调用者的信息
Get information about function caller
我定义了一个自定义 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()
函数添加另一个参数以包含有关包含视图的信息是微不足道的,但我想知道是否有内置的方法来找出谁调用了定义在protocol/delegate
Of course it would be trivial to add another parameter to the sliderUpdatedWithValue()
这是正确的做法。如果方法需要一些可以在参数中传递给它的信息,请添加另一个参数(或修改现有参数以包含更多信息,具体取决于您的设计)。
方法是单向的,从某种意义上说,被调用者只知道调用者希望向它透露的内容。在大多数具有函数或方法调用的语言中都是如此,这完全是设计使然。
即使在您可以获得有关调用者的一些信息的情况下,例如,通过分析跟踪调用堆栈的数据结构,依赖此结构来决定调用的逻辑也不是一个好主意你的功能。
我定义了一个自定义 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()
函数添加另一个参数以包含有关包含视图的信息是微不足道的,但我想知道是否有内置的方法来找出谁调用了定义在protocol/delegate
Of course it would be trivial to add another parameter to the
sliderUpdatedWithValue()
这是正确的做法。如果方法需要一些可以在参数中传递给它的信息,请添加另一个参数(或修改现有参数以包含更多信息,具体取决于您的设计)。
方法是单向的,从某种意义上说,被调用者只知道调用者希望向它透露的内容。在大多数具有函数或方法调用的语言中都是如此,这完全是设计使然。
即使在您可以获得有关调用者的一些信息的情况下,例如,通过分析跟踪调用堆栈的数据结构,依赖此结构来决定调用的逻辑也不是一个好主意你的功能。