今天学了 极客时间 里 张杰 老师的 Swift,今天看的内容是 guard 关键字,说实话感觉暂时没有感觉出来它的好处。
guard
- guard 语句,类似于 if 语句,基于不二之表达式来执行语句。使用guard 语句来要求一个条件必须是真才能执行 guard 之后的语句。与 if 语句不通,guard 语句总是有一个 else 分之 —— else 分句里的代码会在条件不为真的时候执行。
- 当编写条件语句的时候,左边的代码间距应该是一个“黄金”或者“快乐”的大道。这是说,不要嵌套 if 语句。多个 return 语句是 OK 的。这样可以避免圈复杂度(Cyclomatic Complexity),并且让代码更加容易阅读。因为你的方法的重要部分没有嵌套在分支上,你可以很清楚地找到相关的代码。
检查 api 的可用性
这是 guard 关键字使用的实例
- Swift 拥有内置的对 API 可用性的检查功能,它能够确保你不会悲剧地使用了对部属目标不可 用的 API。
- 你可以在 if 或者 guard 语句中使用一个可用性条件来有条件地执行代码,基于在运行时你想 用的哪个 API 是可用的。
示例
课程中讲了一个反例,反例如下:
func isIpAddress(ipString: String) -> (Int, String) {
let components = ipString.split(separator: ".")
if components.count == 4 {
if let first = Int(components[0]), first >= 0 && first <= 255 {
if let second = Int(components[1]), second >= 0 && second <= 255 {
if let third = Int(components[2]), third >= 0 && third <= 255 {
if let fourth = Int(components[3]), fourth >= 0 && fourth <= 255 {
return (0, "ip 地址合法")
} else {
return (4, "ip 地址第四部分不对")
}
} else {
return (3, "ip 地址第三部分不对")
}
} else {
return (2, "ip 地址第二部分不对")
}
} else {
return (1, "ip 地址第一部分不对")
}
} else {
return (100, "ip 地址必须有四部分")
}
}
print(isIpAddress(ipString: "127.0.0.1"))
看到反例的写法以后,又给出了使用 guard 关键字解决的方法,代码如下:
func isIpAddress1(ipString: String) -> (Int, String) {
let components = ipString.split(separator: ".")
guard components.count == 4 else {
return (100, "ip 地址必须有四部分")
}
guard let first = Int(components[0]), first >= 0 && first <= 255 else {
return (1, "ip 地址第一部分不对")
}
guard let second = Int(components[1]), second >= 0 && second <= 255 else {
return (2, "ip 地址第二部分不对")
}
guard let third = Int(components[2]), third >= 0 && third <= 255 else {
return (3, "ip 地址第三部分不对")
}
guard let fourth = Int(components[3]), fourth >= 0 && fourth <= 255 else {
return (4, "ip 地址第四部分不对")
}
return (0, "ip 地址合法")
}
print(isIpAddress1(ipString: "127.0.0.1"))
说实话,我真没感觉到它的好用之处,对于第一个反例,通常我们也不会那样写代码,通常我们的写法是:
func isIpAddress(ipString: String) -> (Int, String) {
let components = ipString.split(separator: ".")
if components.count != 4 {
return (100, "ip 地址必须有四部分")
}
if () {
}
也就是让尽早的不合理提早的返回,其实 guard 也是这样做了。所以,没有太多的体会到 guard 的用法。
我的微信公众号:“码农UP2U”
网友评论