标签: closures

快速传递闭包以替换委托

我使用块从其他类获取回调。我是 swift 的初学者。所以我需要找到一种方法来在一个类中定义一个闭包并将其分配给另一个类中的一个闭包变量。我将调用这个闭包来获得一等舱二等舱的回调。

我想要的是这样的东西,

Class A {

     func viewdidload() {
       let b:B = B()
       b.closure(string:NSString) = {
            print string
         }
     }

}



class B {
       var closure(NSString);

       func () {
          closure(string)
       }

}
Run Code Online (Sandbox Code Playgroud)

closures ios swift

0
推荐指数
1
解决办法
2400
查看次数

Groovy 中带闭包的递归

我目前正在尝试理解递归问题。此代码检查节点是否是叶节点,如果是,则会增加叶节点的数量。

我无法理解 fn.call(this) 的作用以及它如何调用 for 循环内的闭包。

这是我的代码。

class TreeNode {
    String name
    List<TreeNode> children = []

    // if no children, there is no leaf node
    boolean isLeaf() {
        return !children
    }

    void walkTree(Closure fn) {
        fn.call(this)
        for (child in children) {
            child.walkTree(fn)
        }
    }

}

testTreeNode = new TreeNode(name: "Fred", children: [
            new TreeNode(name: "Janet", children: [
                    new TreeNode(name: "Mark"),
                    new TreeNode(name: "Anne", children: [new TreeNode(name: "Simon") ]),
                    new TreeNode(name: "Kelly")
            ]),
            new TreeNode(name: "Nigel")
    ])

   def leafCount = 0 …
Run Code Online (Sandbox Code Playgroud)

recursion groovy closures

0
推荐指数
1
解决办法
742
查看次数

闭包和 funarg 问题之间的区别?

我有一个错误的理解,过滤器功能是向下的 funarg 问题的一个例子吗?我在源面板下使用 chrome 调试器,并在范围部分下注意到了这一点。

我的描述截图

过滤器函数参数cb是闭包还是strainer闭包函数?我发现很难在网上整理有关闭包和 funarg 问题的信息。我显然不明白 funarg 问题或闭包,需要一些帮助吗?

function strainer(collection, cb) {
  return collection.reduce(function inner(acc, curr) {
    if (cb(curr)) {
      return acc.concat(curr);
    }
    return acc;
  }, []);
}

function even(number) {
  if (number % 2 === 0) {
    return true;
  }
  return false;
}

var collection = [1, 2, 3, 4, 5];

strainer(collection, even);
Run Code Online (Sandbox Code Playgroud)

背景:我的印象是私有变量返回到外部环境创建了闭包,但该示例看起来有所不同。

下面的 flintstones 函数示例在引号函数的范围内有闭包。(我认为这是向上的 funarg 问题)

function strainer(collection, cb) {
  return collection.reduce(function inner(acc, curr) {
    if (cb(curr)) {
      return acc.concat(curr); …
Run Code Online (Sandbox Code Playgroud)

javascript closures first-class-functions

0
推荐指数
1
解决办法
370
查看次数

如何将 Objective-C 块转换为 Swift 闭包

我有一个方法,其中包含一个在 Objective-C 中定义的块:

+(void)getNewList:(NewListRequestModel *)model returnInfo:(void(^)(NewListResponseModel* resModel))retModel;
Run Code Online (Sandbox Code Playgroud)

我像这样调用它:

[API getNewList:model returnInfo:^(NewListResponseModel *resModel) {
      //code
}];
Run Code Online (Sandbox Code Playgroud)

在 Objective-C 中。

现在我想在 Swift 3.2 中调用它:

 API.getNewList(model, returnInfo: {(resModel: NewListResponseModel) -> () in
       //my code     

  })
Run Code Online (Sandbox Code Playgroud)

但我总是遇到错误:

Cannot convert value of type '(NewListResponseModel) -> Void' to expected argument type '((NewListResponseModel?) -> Void)!'
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我以正确的方式调用它吗?谢谢。

closures objective-c-blocks swift swift3

0
推荐指数
1
解决办法
2337
查看次数

闭包与嵌套函数

有人可以解释一下,闭包函数和嵌套函数有什么区别?它们都在外部函数内部,但我不明白它们之间的区别。

python closures

0
推荐指数
1
解决办法
1162
查看次数

.net 核心开关表达式以错误的值递增

我在玩我的 intcode 计算机实现(从代码 2019 的出现开始),发现当我实现开关(选择要执行的操作)时,它采用了错误的值。

下面的代码演示了这一点。 InstructionPointer有一个值2opcode有值6意味着OpcodeJumpIfFalse将被使用。函数Jif()被调用得很好,它返回一个值,在我的例子中它返回0. Jif()还修改了 的值InstructionPointer,将其值更改为9。该InstructionPointer会的被增加0(返回值Jif()),我会想到它的价值是9,但它的价值会回去做2

         InstructionPointer += opcode switch
         {
            OpcodeAdd => Add(),
            OpcodeMultiply => Mul(),
            OpcodeInput => Inp(),
            OpcodeOutput => Out(),
            OpcodeJumpIfTrue => Jit(),
            OpcodeJumpIfFalse => Jif(),
            OpcodeLessThan => Let(),
            OpcodeEquals => Equ(),
            OpcodeAdjustRelativeBase => Arb(),
            OpcodeHalt => End(),
            _ => throw new ArgumentOutOfRangeException()
         };
Run Code Online (Sandbox Code Playgroud)

显示相同行为的最小示例:

         int …
Run Code Online (Sandbox Code Playgroud)

c# lambda closures local-functions

0
推荐指数
1
解决办法
68
查看次数

Swift 中 Lottie 动画的闭包函数

有没有办法知道什么时候Lottie animation完成?我需要delete 一个tableViewCell 但只有在animation 完成之后。这是animation

设置:

    //MARK: setup Loading-Animation
func setupLoadingAnimation(){

    successAnimation.translatesAutoresizingMaskIntoConstraints = false
    self.contentView.addSubview(successAnimation)

    successAnimation.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: -30).isActive = true
    successAnimation.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
    successAnimation.widthAnchor.constraint(equalToConstant: 160).isActive = true
    successAnimation.heightAnchor.constraint(equalToConstant: 160).isActive = true

    successAnimation.isHidden = true
    successAnimation.loopMode = .playOnce
}
Run Code Online (Sandbox Code Playgroud)

行动:

@objc func checkButtonTapped(){
    self.deleteWishCallback?()
    self.successAnimation.isHidden = false
    self.successAnimation.play()
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是能够self.deleteWishCallback?()self.successAnimation.play(). 有没有办法做到这一点?找不到任何关于此的信息!

closures ios swift lottie

0
推荐指数
1
解决办法
257
查看次数

对于这种情况,我对箭头函数中的“this”关键字感到困惑

我有两种情况,我对得到的输出感到困惑。

情况1 :

let x = {
  b: 5,
  y: function a() {
    return function() {
      return () => {
        console.log(this);
      }
    }
  }
}
x.y()()();
Run Code Online (Sandbox Code Playgroud)

在运行时,x.y()()()我将Window对象作为输出,但根据箭头函数的定义,输出应该是其父函数。

案例2:

let x = {
  b: 5,
  y: function a() {
    return () => {
      console.log(this);
    }
  }
}
x.y()();
Run Code Online (Sandbox Code Playgroud)

如果我删除一层嵌套,这是一个基本示例,然后在运行时x.y()(),我将获取对象x作为输出。

你能解释一下为什么我会得到这些输出吗?

javascript closures ecmascript-6 arrow-functions

0
推荐指数
1
解决办法
186
查看次数

在 Objective-C 和 Swift 中编写不返回任何参数且不接受任何参数的闭包的所有有效方法是什么?

我无法理解 Swift 和 Objective-C 中的闭包语法。

有人能告诉我用两种语言编写一个不接受任何参数并且不返回任何内容的闭包的所有可能方法吗?

closures objective-c ios swift swiftui

0
推荐指数
2
解决办法
158
查看次数

由两个闭包修改的变量

考虑以下(人为的)递增x方式9

fn main() {
  let mut x = 0;
  let mut f = || {
    x += 4;
  };
  let _g = || {
    f();
    x += 5;
  };
}
Run Code Online (Sandbox Code Playgroud)
error[E0499]: cannot borrow `x` as mutable more than once at a time
 --> x.rs:6:12
  |
3 |   let mut f = || {
  |               -- first mutable borrow occurs here
4 |     x += 4;
  |     - first borrow occurs due to use of `x` in …
Run Code Online (Sandbox Code Playgroud)

closures mutable rust borrowing

0
推荐指数
2
解决办法
207
查看次数