天道酬勤,学无止境

delegates

Reading a Variable that Exists in a Delegate Function

问题 我有一个委托,它修改了一个名为tagToIndex的变量,我试图从委托中返回修改后的变量。 tagToIndex在类的前面定义,但它不包含我需要的信息。 我的问题是,有没有办法读取变量tagToIndex ,因为它存在于willPressItemAt函数中? 截至目前,我无法在函数之外读取变量。 显然我不能在willPressItemAt上使用return命令,因为这需要我输入我不能做的参数。 此外,我尝试使用委托,但并没有真正解决问题。 class MyCell: UITableViewCell, YSSegmentedControlDelegate { var tagToIndex = [0:0,1:0,2:0,3:0,4:0,5:0] let actionButton = YSSegmentedControl( frame: CGRect.zero, titles: [ "Yes", "No" ]) } func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) { tagToIndex[actionButton.tag] = index print(tagToIndex) } func segmentedControl(_

2022-05-17 05:20:22    分类:技术分享    ios   swift   delegates

How can I overwrite a function in addEventListener?

问题 在我的应用程序中,有几个按钮可以触发我的函数loadObj(a) 。 该函数主要使用 Three.js 库加载对应的 3D 对象。 当我选择一个对象并单击相应的按钮时,会出现一组三个额外的按钮,允许我加载所选对象的三个变体。 下面的代码已经使用addEventListener适用于这种情况。 当我选择一个不同的对象时会出现我的问题,这会再次触发下面的代码。 然后,如果我单击新选择对象的额外按钮之一,它会加载正确的对象,但也会加载前一个对象。 如果我选择第三个对象,如果我单击一个额外的按钮,它不仅会加载相应的对象,还会加载前两个。 我已经读过addEventListener以累积方式工作,其中功能只是不断被添加。 因此,每次运行下面的循环时,它都会添加一个带有新模型路径的新loadObj到任何其他先前的 loadObj 。 有没有办法覆盖addEventListener中的函数? 在添加新的之前,我需要从addEventListener中删除以前的loadObj 。 //Solve the scope/closure problem to able to call loadDress inside the "for" loop below function delegate(a) { return function(){ loadObj(a) } } for(var item

2022-05-16 01:09:37    分类:技术分享    javascript   delegates   addeventlistener

How to avoid a list element in a list model from being added to ListView in qml

问题 我有一个ListModel : ListModel { id: sourceModel ListElement { sourceType: "Christian's Galexy"; sourceName: "Bluetooth"; visible: true } ListElement { sourceType: "BBC Radio"; sourceName: "DAB"; visible: true } ListElement { sourceType: "Media Library"; sourceName: ""; visible: false } ListElement { sourceType: "Chris's Music"; sourceName: "USB"; visible: false } } 我有一个ListView : ListView { id: source_list width: parent.width; height: parent.height spacing: 6 model: sourceModel delegate: sourceDelegate focus: true interactive: true clip: true boundsBehavior: Flickable.StopAtBounds }

2022-05-15 14:14:12    分类:技术分享    qt   listview   delegates   qml   qtquick2

Why would anyone want to use Invoke() (not BeginInvoke())?

问题 有人告诉我 Invoke() 类似于普通的方法调用......那么为什么人们会选择使用 Invoke 而不是普通的方法调用呢? 我试图在网上搜索这个问题,我得到的是使用 BeginInvoke() 的优点,但是使用 Invoke() 的优点是什么? 回答1 回答2 首先值得注意的是,我们必须有类似.Invoke()之类的东西作为语言之间的交汇点。 正如 C# 中的int和 VB.NET 中的Integer对它们和任何其他 CLR 语言都是System.Int32一样; 所以我们也有任何 CLR 语言都可以访问的Invoke() ,然后它们可以以适合其语法的方式提供额外的语法糖(大多数人会考虑 C# 中的大量 VB 样式约定或 VB 中的大量 C# 样式约定是句法醋;糖总是必须尽可能地匹配语言的其余部分)。 这个糖加了,为什么不一直用呢? 有些人有时会想清楚他们正在与代表打交道。 有些人只是不会使用它; 我大多不会。 像所有语法糖一样,优点和缺点是清晰而不是正确性的问题(事实上,查看反射器中对x.Invoke()的调用,你会看到它是x()因为反射器不知道你是哪个用过的)。 回答3 回答4 为了改变,例如,线程执行某事。 请注意,任何 UI 控件都应该并且始终只能从创建它的线程(实际上是消息泵)中进行操作。 因此,如果另一个线程正在操作控件(从其他线程的角度同步),那么

2022-05-15 01:00:09    分类:技术分享    c#   .net   delegates   invoke   begininvoke

Implementing the Command Pattern using C# Action delegate

问题 是否可以使用 Queue of Action 委托来实现 GOF 命令模式? 一段时间以来,我一直试图绕开它,但我很困惑,因为我想添加到队列中的每个可能的操作都可能有不同数量的参数。 有什么建议么? 我是否通过专注于命令模式来找出错误的树? 更新: 非常感谢jgauffin,它很有效......我的实现现在看起来像 public class CommandDispatcher { private readonly Dictionary<Type, List<Action<ICommand>>> _registeredCommands = new Dictionary<Type, List<Action<ICommand>>>(); public void RegisterCommand<T>(Action<ICommand> action) where T : ICommand { if (_registeredCommands.ContainsKey(typeof (T))) _registeredCommands[typeof (T)].Add(action); else _registeredCommands.Add(typeof (T), new List<Action<ICommand>> {action}); } public void Trigger<T>(T

2022-05-14 19:49:19    分类:技术分享    c#   design-patterns   delegates   command-pattern

Automatically create handler signature in Visual Studio

问题 在 c#、asp.net 4.0、VS2015 中工作,我创建了一个用户控件,它只是一个下拉列表,其中包含用户可以传递给它的几个其他属性,以及一个事件和委托。 当下拉列表更改时,将触发 OnSelectedIndexChanged,然后检查是否填充了事件并调用委托。 定义如下所示: public partial class SiteList : System.Web.UI.UserControl { public event SiteIDChangedHandler SiteIDChanged; public delegate void SiteIDChangedHandler(object sender, EventArgs e); } 我遇到的问题是,当使用该用户控件并附加事件时,在 .aspx 页面中工作时,未在 Visual Studio 中创建委托的定义。 例如,当我输入以下内容时 <CW:SiteList runat="server" ID="SiteList" OnSiteIDChanged="" 并点击 OnSiteIDChanged 的​​ = 符号,然后显示“创建新事件”作为 OnSiteIDChanged 的​​选项,就像我在 .net 中使用的任何其他事件一样。 当我选择“CreateNewEvent”时,在后面的代码中创建的方法是:

2022-05-13 19:32:04    分类:技术分享    c#   events   delegates

How to manipulate at runtime the invocation list of a Delegate?

问题 我想知道如何从父委托的调用列表中删除单个委托。 <DelegateName>.RemoveAll(); 现在我可以删除所有,这将只是为了让这个想法付诸实践,看看它是否应该工作,但是任何被删除的代表都需要在运行时再次添加!!! 所以: ... foreach(Delegate d in <DelegateName>.getInvocationList) { // do something with 'D'?? } 现在我可以访问 'D' 我可以将它放入 .Remove() 但它需要两个参数??? 请问我能得到一些帮助吗? 最后,一旦代理被删除,再次添加它的最佳方法是什么? 所以我假设反射可能会在其中发挥作用,但要交给你们。 更新: 本质上,有一个全局委托,它有许多事件,它们存在于作为它的实例的不同 winforms 类中。 所有这些事件都有一个处理程序,在事件被触发时处理它。 一直位于顶部的委托管理着与其签名匹配的所有处理程序。 我想在顶部处理这个委托,我想删除所有处理程序,然后在运行时重新添加它们。 所以顶部的委托是一个多播委托,它的调用列表是一个单独的委托列表,这些委托又指向我添加的四个处理程序之一。 我希望这是有道理的,这就是我在做什么的一般概念。 回答1 回答2

2022-05-12 10:42:25    分类:技术分享    c#   winforms   reflection   delegates

Passing an extension method to a method expecting a delegate. How does this work?

问题 所以在工作中,我使用了一个我们没有编写的 API,其中一个方法采用了委托。 出于某种原因,我想到我有一个适合该签名的扩展方法,所以我想知道它是否可以工作。 我确信这不会令我惊讶,但确实如此。 请允许我演示一下: 假设我有这些课程: public interface IMyInterface { } public class MyClass : IMyInterface { } public static class Extensions { public static string FuncMethod(this IMyInterface imy, int x) { return x.ToString(); } } 现在假设我在某处有一个方法签名,如下所示: private static void Method(Func<int, string> func) { } 现在我的扩展方法(看起来像)匹配那个签名,但我们都知道扩展方法只是烟雾和镜子,所以它真的不匹配那个签名。 然而,我可以安全地做到这一点: var instance = new MyClass(); Method(instance.FuncMethod); 我的问题是,这是如何工作的? 编译器为我生成了什么来使这个可以接受。 Extension 方法的实际签名采用IMyInterface的实例,但Func没有

2022-05-12 03:26:04    分类:技术分享    c#   delegates   extension-methods

Overriding a superclass delegate in Swift

问题 我正在开发一个包含两个 UIView 的 Swift (v1.2) 项目。 MyView和MyViewSubclass 。 MyView有一个委托,我想在MyViewSubclass 中将其覆盖为子协议,类似于UITableViews有一个也符合超级UIScrollViewDelegate的UITableViewDelegate 。 我的第一个想法是覆盖超类属性,但这会导致编译器错误,因为子类不能覆盖具有不同类型的超类属性。 // Example throws a compiler error. Can't override property with different type class MyView : UIView { weak var delegate : MyViewDelegate? } class MyViewSubclass : MyView { override weak var delegate : MyViewSubclassDelegate? // Compiler error } protocol MyViewDelegate { func someFunc () } protocol MyViewSubclassDelegate : MyViewDelegate { //func someFunc () Edit: redefinition

2022-05-11 16:00:05    分类:技术分享    ios   swift   inheritance   delegates   overriding

How to Pass Values between Multiple View Controllers using Delegate / Protocol

问题 基本上,我现在打算使用委托在视图控制器之间传递值。 视图控制器的流程是 A -> B -> C 当用户在“C”视图控制器中执行某些操作时,如何将值传递回第一个视图控制器,即“A”? 在我自己的代码中,委托方法永远不会被触发,并且“self.delegate”始终为“null”。 我不确定为什么以及如何解决这个问题。 下面是First VC和Third VC的代码: #import "ViewController.h" #import "ThirdViewController.h" @interface ViewController ()<PassValueProtocal> @property (weak, nonatomic) IBOutlet UILabel *myLabel; @end @implementation ViewController { ThirdViewController *thirdVC; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void) passValueBack:(NSString *)value { NSLog(@"HAHAH"); } -

2022-05-11 15:01:04    分类:技术分享    ios   objective-c   delegates   protocols