ios – 如何添加@noescape注释到可选闭包

ios – 如何添加@noescape注释到可选闭包,第1张

概述我的功能有这个签名: func foo(bar: String, baz: ((String) -> ())? = nil) 而现在我想让自己在给定的关闭中逃脱自我. 但是当我尝试这个: func foo(bar: String, @noescape baz: ((String) -> ())? = nil) 编译器抱怨: @noescape may only be applied to para 我的功能有这个签名:
func foo(bar: String,baz: ((String) -> ())? = nil)

而现在我想让自己在给定的关闭中逃脱自我.
但是当我尝试这个:

func foo(bar: String,@noescape baz: ((String) -> ())? = nil)

编译器抱怨:

@noescape may only be applIEd to parameters of function type

是否可以在可选参数中使用它?

解决方法 要求

如果您的要求如下:

baz param是封闭
> baz param被标记为@noescape(因为你想在关闭代码中省略自己)
>在调用foo时可以省略baz param

然后可以使用以下语法

func foo(bar: String,@noescape baz: ((String) -> ()) = { _ in } ) {}

你可以看到与你的代码的主要区别是:

>这里baz不是一个可选类型(但它是一个“可选参数”)
>并且其默认值是一个空的闭包不是一个零值.

例子

如您所要求的,您现在可以将封闭物传递给baz,而无需使用自身

class Boo {    let world = "world"    func boo() {        foo("hello") { (something) -> () in            print(world)        }    }}

你也可以省略baz param

class Boo {    let world = "world"    func boo() {        foo("hello")    }}

更新:使用与VoID不同的返回类型的闭包

在下面的评论中,用户TadeasKriz询问如何使用这种方法与一个闭包返回值不同VoID.

这是解决方案

func foo(bar: String,@noescape baz: ((String) -> (Int)) = { _ in return 0 } ) {}

这里的baz param确实需要一个类型为String的String参数和类型为Int的返回值的闭包.
正如你所看到的,我添加了一个默认值到param,一个闭包确实返回0.请注意,默认的关闭将永远不会被使用,所以你可以用你想要的任何Int值替换0.

现在你可以决定是否使用关闭到baz param

class Boo {    let world = "world"    func boo() {        foo("hello") { (something) -> Int in            print(world)            return 100        }    }}

或者,再次,你可以完全省略巴斯参数.

class Boo {    let world = "world"    func boo() {        foo("hello")    }}
总结

以上是内存溢出为你收集整理的ios – 如何添加@noescape注释到可选闭包全部内容,希望文章能够帮你解决ios – 如何添加@noescape注释到可选闭包所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1097831.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存