风骚的Guard语法

2022-03-25 04:12:58

  Swift 2.0 带来了令人推动的guard语句。但许众人仍然不太通晓guard的意思,特地是和 Swift 2.0 之前的简易if语句比拟较。

  与if语句类似的是,guard也是基于一个外达式的布尔值去判定一段代码是否该被奉行。与if语句分歧的是,guard唯有正在要求不知足的时分才会奉行这段代码。你能够把guard近似的看做是Assert,然则你能够文雅的退出而非溃败。

  这是最基础的Objective-C体例来保障一个变量真的存正在并切合一个要求。没什么大题目,然则有少许误差:

  你是正在检验一个不切合你希望的要求,而非检验你思要的值。倘若你加了一堆像云云的要求判定,代码就变的欠好通晓。你正在这里原来是等着你的要求通只是。

  这个函数没有了第一个函数的2个缺陷,但引入了一个新的。你把你要写的代码都放正在了悉数要求判定中,而不是之后。你也许不会立时认识到这个题目,然则你能够设思正在你的代码被奉行之前,倘若嵌套了很众必要被完婚的要求判定,这会变的众难读懂。

  对此的治理伎俩是先对每个要求一一做检验,倘若不切合要求判定就退出。这就会让人容易看出来什么要求会让这个函数退出。

  我外传过这个叫保镖形式(Bouncer Pattern),这个形式至极的合理。你要正在坏环境进门之前把它们挡出去。这让你每次只思量一种环境,而不消去搞了了何如同时将悉数的要求判定摆设正在一块。

  是对你所希望的要求做检验,而非不切合你希望的。又是和assert很相通。倘若要求不切合,guard的else语句就运转,从而退出这个函数。

  倘若通过了要求判定,可选类型的变量正在guard语句被挪用的规模内会被自愿的拆包 - 这个例子中该规模是fooGuard函数内部。这是一个很紧张,却有点稀罕的特色,但让guard语句至极适用。

  指望上面这个简易的例子告诉你能够立时正在你的swift代码中操纵guard,从而让你的函数/伎俩更了了。