Swift中的Void类型与空元祖表达式

Posted zenny_chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift中的Void类型与空元祖表达式相关的知识,希望对你有一定的参考价值。

可能有不少Swift开发者会忽略这么一个细节:在Swift中,Void类型其实是一个别名类型,而其真正的类型为(),即一个空元祖(empty tuple)!

这种语言特性给Swift带来了一些比较方便的表达方式。当()作为函数返回类型时,它作为一个类型;当它作为一个表达式时,则表示一个空元祖。这样,我们在返回类型为()(或Void)的Swift函数中可以,最后返回一个不干任何事的空元祖,这在三目表达式中尤为有用。请看以下代码:

var sss = 0

func MyFunc() -> () {
    return sss == 0 ? (sss = 100) : ()
}

func MyFunc2() -> Void {
    return sss > 0 ? sss += 100 : (sss += 0)
}


class ViewController: NSViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        MyFunc()
        print("sss = \(sss)")
        
        MyFunc2()
        print("sss = \(sss)")
    }
}

上述代码中,首先要提醒各位的是,三目表达式中的 : 操作符的优先级要大于 += 操作符,因此这里(sss += )需要加括号,否则就变成了(sss > 0 ? sss += 100 : sss) += 0了。其次,像 =、+=、-=等等操作符都返回Void,因此如果我们返回一个非Void的值要把它转为Void,用 += 0之类的能做间接转换。

当然,Void只能作为类型,而不能作为表达式来用。

以上是关于Swift中的Void类型与空元祖表达式的主要内容,如果未能解决你的问题,请参考以下文章

Swift初见Swift函数

Swift 4:无法将类型“(Void)-> Void”的值分配给类型“(()-> Void)?”

Java数值类型提升机制(三目条件运算符与空指针问题)

不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助

ComboBox与空项目?

swift_简单值 | 元祖 | 流程控制 | 字符串 | 集合