繁体   English   中英

Swift-可以在调用闭包时设置self的值吗?

[英]Swift - Can I set the value of self when calling a closure?

TLDR :是否有等效的JavaScript call或在Swift中apply

假设我有一个Foo类,它具有一个实例变量bar和一个方法baz ,该方法接收一个闭包作为参数:

class Foo {
  var bar: String = ""
  func baz(closure: (Void) -> Void) {
    closure()
  }
}

我想更改闭包内的self值。 因此,代码由Foo实例执行。

像这样:

let foo = Foo()
foo.baz {
  // I want to be able to change bar value without calling foo.bar, like this:
  bar = "Hello world"
}
// Then foo.bar would be "Hello world"

那可能吗?

您不能以您所描述的方式访问闭包中的Foo成员,但是您可以做的是修改闭包以将Foo的实例作为参数,并传入self 结果可能看起来像这样。

class Foo {
    var bar: String = ""
    func baz(closure: (this: Foo) -> Void) {
        closure(this: self)
    }
}

let foo = Foo()
foo.baz { this in
    this.bar = "Hello world"
}

print(foo.bar) // Hello world

这里有一个通用的版型,看起来更接近call在JavaScript。

class Foo {
    var bar: String = ""
}

func call<T>( this: T, closure: (T->Void) ){
    closure(this)
}

let foo = Foo()

call(foo){ this in
    this.bar = "Hello World"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM