首页 > 试题广场 >

Swift 2.0 or later 下面的代码有一个编译错

[问答题]

Swift 2.0 or later

下面的代码有一个编译错误,请指出来并说明原因。

1
2
3
4
5
6
7
8
9
10
struct Kitten {
}
func showKitten(kitten: Kitten?) {
guard let k = kitten else {
print("There is no kitten")
}
print(k)
}

提示:有三种方法修复它。

推荐

guard语句中得else语句必须需要一个返回路径,你可以使用return ,抛出异常或者调用@noreturn.最简单的解决方法是添加一个return语句,代码如下:

1
2
3
4
5
6
7
func showKitten(kitten: Kitten?) {
guard let k = kitten else {
print("There is no kitten")
return
}
print(k)
}

下面是抛出异常的版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enum KittenError: ErrorType {
case NoKitten
}
struct Kitten {
}
func showKitten(kitten: Kitten?) throws {
guard let k = kitten else {
print("There is no kitten")
throw KittenError.NoKitten
}
print(k)
}
try showKitten(nil)

最后,调用一个@noreturn功能函数 fatalError( ) 解决方案:

1
2
3
4
5
6
7
8
9
10
struct Kitten {
}
func showKitten(kitten: Kitten?) {
guard let k = kitten else {
print("There is no kitten")
fatalError()
}
print(k)
}
发表于 2018-07-12 20:40:23 回复(0)