swift 语法糖

if let 与 guard 语法糖

话说if let 和 guard 只是语法糖,没有也可以,但有了可以使得代码更简洁方便。要理解 if let 和 guard,不妨设想假如没有这两者,代码会怎么写。

if let

func doSomething(str: String?)

{

let v: String! = str

if v != nil

{

// use v to do something

}

}

Swift 中因为有optional, 经常需要判断是否为空。假如没有if let,大致写成上面的样子,有了if let, 可以改写成

func doSomething(str: String?)

{

if let v = str

{

// use v to do something

}

}

上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。

guard

假如if中出现的代码很长,我们写代码时可以将错误情况先返回。比如:

func doSomething(str: String?)

{

let v: String! = str

if v == nil

{

return

}

// use v to do something

}

这样做可以避免过多的嵌套。上面代码实在太常见了,swift也提供一个guard这个语法糖,用guard可以改写成:

func doSomething(str: String?){

guard let v = str else { return }

// use v to do something

}

上面两段代码的控制流是一样的。也可以看出guard的写法更加简洁方便。

至于if let 和 guard 语法中出现的where,只是附加一些条件。相当于逻辑运算 && 和 ||。SQL中的条件语法也是用where这个关键字。

假如还不理解,动手将一段代码,不用if let 和 guard 进行改写。试多几次,就会发觉很自然了。

语法糖Selector例子

创建控制器,添加Button

override func viewDidLoad() {

super.viewDidLoad()

let btn = UIButton(frame: CGRectMake(100,100,100,100))

btn.backgroundColor = UIColor.redColor()

view.addSubview(btn)

}

func printFire() {

print("fire")

}

想实现控制器里的Button点击事件,但是,如果一个控制器里的Button特别的多,那添加Button点击事件的Selector 会觉得特别的臃肿。所以语法糖就是要拓展Selector

private extension Selector {

static let printFire = #selector(ViewController.printFire)

}

我们现在给viewDidLoad方法中的Button 添加点击事件

btn.addTarget(self, action: .printFire, forControlEvents: .TouchUpInside)

如果Button过多的话,用语法糖方便管理Button的点击事件,又不会把点击事件变得过于臃肿

下面是控制器的完整代码

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

let btn = UIButton(frame: CGRectMake(100,100,100,100))

btn.backgroundColor = UIColor.redColor()

btn.addTarget(self, action: .printFire, forControlEvents: .TouchUpInside)

view.addSubview(btn)

}

func printFire() {

print("fire")

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

private extension Selector {

static let printFire = #selector(ViewController.printFire)

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift语法糖的使用 语法糖的简介 语法糖Selector例子 语法糖的简介 我个人对语法糖的理解就是让你的代码...
    鸟人扎墨客阅读 2,870评论 0 0
  • Swift语法糖的使用 这个是哪里看的忘记了,反正内容不是我写的 语法糖的简介 语法糖Selector例子 语法糖...
    鸟人扎墨客阅读 1,307评论 0 0
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,338评论 3 25
  • 使用playground来测试代码很有意思 Xcode 7.2 如果项目名称包含中文和数字 在数组中添加元素 会造...
    一黑阅读 631评论 0 0
  • 今天是最有挫败感的一天。 一 整理手机,才发现写过的便签已经一百二十五条了,转眼2016年都过完四分之一,却还祭奠...
    一个人的太阳_阅读 361评论 0 1