Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
默认返回值的Swift生成错误_Swift_Switch Statement_Swift2 - Fatal编程技术网

默认返回值的Swift生成错误

默认返回值的Swift生成错误,swift,switch-statement,swift2,Swift,Switch Statement,Swift2,下面的代码示例很好地说明了我的目的。我有一个函数,它应该返回给定的类型。它是基于一个不完整的开关来实现的。但是如果达到默认值情况,我希望只生成一个错误。而不是返回某人选择的可选然后在该点死亡 func someFunc(value:UInt8) -> SomeType { switch value { case 0x00: return SomeType.foo() case 0x13: return SomeType.bar()

下面的代码示例很好地说明了我的目的。我有一个函数,它应该返回给定的类型。它是基于一个不完整的开关来实现的。但是如果达到
默认值
情况,我希望只生成一个错误。而不是返回某人选择的
可选
然后在该点死亡

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
    }
}
}


这就是我将如何实现错误。

如果您希望程序在默认情况下终止 (因为默认情况将指示编程错误), 使用
fatalError()

fatalError()
导致程序立即终止 带有如下错误消息

fatal error: Unexpected value 99: file main.swift, line 13 致命错误:意外值99:file main.swift,第13行
fatalError()
函数标记为
@noreturn
(分别为 Swift 3中的返回类型
Never
), 因此,编译器不会对丢失的案例或丢失的数据进行投诉 返回值

与类似的函数(如
assert()
assertionFailure()
)相比,
fatalError()
永远不会“优化”,而是在调试、优化和未检查的版本中对其进行评估。

如果要完全停止执行,可以使用
fatalError()
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
fatal error: Unexpected value 99: file main.swift, line 13
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