标签: block

铸造闭合/块

在Objective-C中,我经常传递块.我经常使用它们来实现模式,以帮助避免将内容存储到实例变量中,从而避免线程/时序问题.

例如,我将它们分配给一个CAAnimationvia,-[CAAnimation setValue:forKey:]这样我就可以在动画结束时执行该块.(Objective-C中可以把块作为对象,你也可以做[someBlock copy][someBlock release].)

但是,尝试在Swift和Objective-C中使用这些模式似乎非常困难.(编辑:我们可以看到语言仍在变化:已经调整了代码,因此它适用于Xcode6-beta2,之前的版本适用于Xcode6-beta1.)

例如,我无法转换AnyObject回块/闭包.以下产生编译器的错误:

override func animationDidStop(anim: CAAnimation!, finished flag: Bool)
{
    let completion : AnyObject! = anim.valueForKey("completionClosure")
    (completion as (@objc_block ()->Void))()
    // Cannot convert the expression's type 'Void' to type '@objc_block () -> Void'
}
Run Code Online (Sandbox Code Playgroud)

我找到了一个解决方法,但它非常难看,恕我直言:在我的桥接标题中,我有:

static inline id blockToObject(void(^block)())
{
    return block;
}

static inline void callBlockAsObject(id block)
{
    ((void(^)())block)();
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在Swift中做到这一点:

func someFunc(completion: (@objc_block ()->Void))
{
    let animation = CAKeyframeAnimation(keyPath: "position")
    animation.delegate …
Run Code Online (Sandbox Code Playgroud)

closures block objective-c swift

15
推荐指数
2
解决办法
4470
查看次数

哪个标准Common Lisp宏/特殊形式建立名为nil的隐式块?

DO,PROG等在它们的身体周围建立一个名为nil的隐式块.CLHS不提供执行此操作的所有标准宏的列表.到目前为止我所知道的:

DO
DO*
PROG
PROG*
LOOP
DOLIST
DOTIMES
DO-SYMBOLS
DO-ALL-SYMBOLS
DO-EXTERNAL-SYMBOLS
Run Code Online (Sandbox Code Playgroud)

是否有任何其他标准CL宏或特殊形式建立隐式nil块?

block common-lisp

14
推荐指数
1
解决办法
752
查看次数

django模板 - 在包含的模板中使用block.super失败(异常)

我们的想法是在一个页面上有多个小部件,并包含这个'小部件'所需的所有js和css文件(以这种方式管理文件很容易).重复的文件不是问题.每个小部件的模板都包含在页面中{%include%}从小部件的模板中我试图将内容添加到父级的块中:

家长:

{%block js%}
{%endblock%}
Run Code Online (Sandbox Code Playgroud)

WIDGET

{%block js%}
   {{block.super}}
   ///my widget spectyfic JS
{%end block%}
Run Code Online (Sandbox Code Playgroud)

这是一个错误 {{block.super}}: Caught AttributeError while rendering: 'BlockNode' object has no attribute 'context'

我不确定我怎么能延长阻止...似乎这在django中是不可能的......任何想法?定义多个块将无法正常工作,因为我们不知道有多少不同的小部件,每个页面上都有我们的名字...(而且这不是一个nemplate的担心)

django templates block include super

14
推荐指数
1
解决办法
6895
查看次数

在python中是否有类中的静态块

我对python比较陌生我想为一个类只运行一次代码块.就像java中的静态块一样.

例如:

class ABC:
    execute this once for a class.
Run Code Online (Sandbox Code Playgroud)

python中有没有这样的选项?

在java中我们这样写.在加载类时,只对类执行一次.不是每个对象创建

public class StaticExample{
    static {
        System.out.println("This is first static block");
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

python static block

14
推荐指数
2
解决办法
4912
查看次数

从C函数返回Objective-C块

声明一个返回Objective-C块的C函数的语法是什么?可能吗?

我认为应该是这样的

(void (^)(void)) myFunctionReturningABlock();
Run Code Online (Sandbox Code Playgroud)

但那不会编译.

block objective-c

14
推荐指数
1
解决办法
5114
查看次数

我可以定义多个静态块吗?

我可以定义多个静态块吗?

如果可能的话,我为什么要定义多个静态块呢?

java static block

14
推荐指数
4
解决办法
4347
查看次数

在Ruby中使用yield和return

任何人都可以帮我弄清楚Ruby中yield和return的使用.我是一个Ruby初学者,所以很简单的例子非常受欢迎.

先感谢您!

ruby block

14
推荐指数
2
解决办法
1万
查看次数

如何制作多个内嵌块元素来拉伸容器的整个宽度?

实现此处显示的输入字段和按钮行为的最佳方法是什么: 在此输入图像描述

html css block

14
推荐指数
2
解决办法
1万
查看次数

'display:block;之间的区别 float:left'const'display:inline-block; 向左飘浮'?

左浮动元素(例如和图像)是否显示之间是否存在实际差异:内联块; 适用于它,而不是保留默认显示:block; 适用规则?

换句话说,有什么区别:

<div style="float: left; display: inline-block;">text</div>
Run Code Online (Sandbox Code Playgroud)

<div style="float: left; display: block;">text</div>
Run Code Online (Sandbox Code Playgroud)

html css block css-float

14
推荐指数
2
解决办法
2万
查看次数

如何调用在不同上下文中占用块的Proc?

举个例子Proc:

proc = Proc.new {|x,y,&block| block.call(x,y,self.instance_method)}
Run Code Online (Sandbox Code Playgroud)

它需要两个参数,x和y,以及一个块.

我想使用不同的self值来执行该块.像这样的东西几乎可以工作:

some_object.instance_exec("x arg", "y arg", &proc)
Run Code Online (Sandbox Code Playgroud)

但是,这不允许您传入一个块.这也行不通

some_object.instance_exec("x arg", "y arg", another_proc, &proc)
Run Code Online (Sandbox Code Playgroud)

也没有

some_object.instance_exec("x arg", "y arg", &another_proc, &proc)
Run Code Online (Sandbox Code Playgroud)

我不知道还有什么可以在这里工作.这是可能的,如果是这样,你怎么做?

编辑:基本上如果您可以通过更改change_scope_of_proc方法来传递此rspec文件,您已解决了我的问题.

require 'rspec'

class SomeClass
  def instance_method(x)
    "Hello #{x}"
  end
end

class AnotherClass
  def instance_method(x)
    "Goodbye #{x}"
  end

  def make_proc
    Proc.new do |x, &block|
      instance_method(block.call(x))
    end
  end
end

def change_scope_of_proc(new_self, proc)
  # TODO fix me!!!
  proc
end

describe "change_scope_of_proc" do
  it "should change the instance method that is called" do …
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming block

13
推荐指数
1
解决办法
5220
查看次数