代码之家  ›  专栏  ›  技术社区  ›  Senseful

在Swift中向一个有返回值但没有输入参数的闭包添加内联显式类型注释?

  •  1
  • Senseful  · 技术社区  · 4 年前

    let f = { input in
      1 + input
    }
    f(2)
    

    通常,您需要提供 explicit type annotation 强制它使用特定类型,或者在编译器无法推断该类型的情况下。当您有一个输入参数时,这很简单:

    let f = { (input: Double) -> Double in
      1 + input
    }
    f(2)
    

    但是,如果没有输入参数,我不确定语法应该是什么样子:

    let f = { -> Double in
      1 + 1
    }
    f()
    

    错误:需要表达式

    • let f = { -> Double in :“错误:应为表达式”
    • let f = { _ -> Double in
    • let f = { Void -> Double in :“错误:无法推断当前上下文中闭包参数'Void'的类型”
    • let f = { Never -> Double in :“错误:无法在当前上下文中推断闭包参数'Never'的类型”

    adding an as clause to the end ,但如果无法使用此语法为闭包定义一个显式的返回类型,则这似乎是一个冗长的疏忽。

    let f = {
      1 + 1
    } as () -> Double
    f()
    

    如何定义闭包的显式返回类型(使用内联语法而不是 作为 ),如果没有输入参数?


    explicit type annotation closure return only 找不到任何相关的东西。)

    1 回复  |  直到 4 年前
        1
  •  3
  •   Martin R    4 年前

    空元组 ()

    let f = { () -> Double in
      1 + 1
    }
    
    print(f()) // 2.0
    

    () 可以同时是 (等同于 Void )还有一个 实例 这种类型:

    let a: Void = ()
    let b: () = ()
    print(type(of: a) == type(of: b)) // true