Swift 为默认 return 值生成错误
Swift generate error for default return value
下面的代码示例很好地说明了我所追求的。我有一个预期 return 给定类型的函数。它基于 incomplete 开关执行此操作。但是如果遇到 default
情况,我希望只是产生一个错误。而不是 return 一个 optional
,有人选择 !
然后在那一刻死去。
func someFunc(value:UInt8) -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
break // BUT I WANT AN ERROR HERE
}
}
func someFunc(value:UInt8) -> (SomeType?,NSError?) {
switch value {
case 0x00:
return (SomeType.foo(),nil)
case 0x13:
return (SomeType.bar(),nil)
default:
return (nil,NSError("Something wrong")
}
}
这就是我实现错误的方式。
如果你想让程序在默认情况下终止
(因为默认大小写会指示 编程错误 ),
使用 fatalError()
:
func someFunc(value:UInt8) -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
fatalError("Unexpected value \(value)")
}
}
fatalError()
导致程序立即终止
带有类似
的错误消息
fatal error: Unexpected value 99: file main.swift, line 13
fatalError()
函数用 @noreturn
标记(分别用
return 在 Swift 中输入 Never
3),
所以编译器不会抱怨丢失的案例或丢失
return 值。
与 assert()
或 assertionFailure()
等类似函数相比,
fatalError()
永远不会 "optimized away",它在调试、优化和未经检查的构建中进行评估。
struct SomeType {
static func foo() -> SomeType {
print("foo")
return SomeType()
}
static func bar() -> SomeType {
print("bar")
return SomeType()
}
}
struct E: ErrorType {}
func someFunc(value:UInt8) throws -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
throw E()
}
}
do {
try someFunc(100)
} catch {
print("error")
}
// prints
// error
下面的代码示例很好地说明了我所追求的。我有一个预期 return 给定类型的函数。它基于 incomplete 开关执行此操作。但是如果遇到 default
情况,我希望只是产生一个错误。而不是 return 一个 optional
,有人选择 !
然后在那一刻死去。
func someFunc(value:UInt8) -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
break // BUT I WANT AN ERROR HERE
}
}
func someFunc(value:UInt8) -> (SomeType?,NSError?) {
switch value {
case 0x00:
return (SomeType.foo(),nil)
case 0x13:
return (SomeType.bar(),nil)
default:
return (nil,NSError("Something wrong")
}
}
这就是我实现错误的方式。
如果你想让程序在默认情况下终止
(因为默认大小写会指示 编程错误 ),
使用 fatalError()
:
func someFunc(value:UInt8) -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
fatalError("Unexpected value \(value)")
}
}
fatalError()
导致程序立即终止
带有类似
fatal error: Unexpected value 99: file main.swift, line 13
fatalError()
函数用 @noreturn
标记(分别用
return 在 Swift 中输入 Never
3),
所以编译器不会抱怨丢失的案例或丢失
return 值。
与 assert()
或 assertionFailure()
等类似函数相比,
fatalError()
永远不会 "optimized away",它在调试、优化和未经检查的构建中进行评估。
struct SomeType {
static func foo() -> SomeType {
print("foo")
return SomeType()
}
static func bar() -> SomeType {
print("bar")
return SomeType()
}
}
struct E: ErrorType {}
func someFunc(value:UInt8) throws -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
throw E()
}
}
do {
try someFunc(100)
} catch {
print("error")
}
// prints
// error