You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何初始化非可选类型的函数类型变量?

非可选类型函数变量的初始化方法

以下是网络代码里常见的变量定义:

private var callback: ((_ blah: String?) -> ())

这段代码没法通过编译,因为缺少初始化器。改成可选类型就很简单:

private var callback: ((_ blah: String?) -> ())?

对应的初始化写法是:

private var callback: ((_ blah: String?) -> ())? = nil

但如果是非可选类型的函数变量,比如下面这样,该怎么初始化?

private var callback: ((_ blah: String?) -> ())

我试过类似这样的写法,但始终无法成功:

private var callback: ((_ blah: String?) -> ()) = ( (_ String?){ return }() )

正确初始化方案

直接给变量赋值一个符合签名的空闭包实现即可:

private var callback: ((_ blah: String?) -> ()) = { _ in }

如果需要更清晰地显式声明参数类型,也可以写成:

private var callback: ((_ blah: String?) -> ()) = { (blah: String?) in }

这种方式满足了非可选类型必须初始化的要求,后续依然能在其他方法里重新给它赋值(比如你补充场景里的callback = onMain操作)。

私有回调的常见使用场景

回调函数设为私有常见的使用场景示例:

class SomeWorker {

  public func someLong(networkThing: String,
                      onMain: @escaping (_ foundIt: Blah?) -> () ) {
    
      callback = onMain
      loopForALongTimeDoingStuff( ... )
  }

  private var callback: ((_ foundIt: Blah?) -> ()) = { _ in }
}

内容的提问来源于stack exchange,提问作者Fattie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:43:14