当前位置: 首页 > 面试题库 >

swift:关闭声明就像块声明

萧宣
2023-03-14
问题内容

我们可以在Objective-C中声明以下块。

typedef void (^CompletionBlock) (NSString* completionReason);

我试图迅速做到这一点,它给错误。

func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction

错误:使用未声明的“ completionFunction”

定义:

var completion: CompletionBlock = { }

这该怎么做?

更新:

根据@jtbandes的回答,我可以创建带有多个参数的闭包,例如

typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()

问题答案:

在对函数类型的语法是(in) -> out

typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void



var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }

请注意,从Swift 3+开始,仅需在输入类型周围加上括号。



 类似资料:
  • 我有一个网站,点击量很大。我遇到过一些问题,包括JDBC连接错误。 我对结束PreparedStatement有点困惑。我需要关闭PreparedStatement吗?还是只需要关闭语句就足够了? 另外,呢?我也需要关闭它吗?

  • use 声明可以将一个完整的路径绑定到一个新的名字,从而更容易访问。 // 将 `deeply::nested::function` 路径绑定到 `other_function`。 use deeply::nested::function as other_function; fn function() { println!("called `function()`"); } mod de

  • 持续按住音量 +和音量 -键直到显示(静音)为止。 再次按下音量 +或音量 -键即可恢复原有音量。

  • 我正在开发一个每隔一段时间重新加载一个图像的应用程序。我这样做是为了在外出途中做出改变。我用的是ImageIO。读取(路径)以读取图像文件。 现在,当我想用我的颜料改变图像时。NET并尝试保存(覆盖)图像,绘制。NET抛出一个IOException。这可能是因为ImageIO只是在进程运行时声明图像是他的。但我就是这么想的。 代码如下: 有人知道怎么解决这个问题吗? 谢谢

  • 我在自学Python。为什么下面的代码不起作用?我是否必须在使用其他函数之前预先声明它? 代码应该创建一个永无止境的循环。 编辑:为什么这段代码什么也不输出?

  • 我用的是c3p0。我建立了一个池,如下所示, 我有一个对象,准备初始化的几个准备好的语句。为了做到这一点,我从PooledDataSource中抓取一个连接(),然后准备一个语句(例如,)。准备好的语句作为私有变量存储在对象中,当前连接在初始化结束时关闭()。准备好的语句用于对象的方法中。 对于更新数据库的准备好的语句,这很好。但是,当我调用一个使用预处理语句()来查询数据库的方法时,我会得到以下