निम्न कोड नमूना बहुत अच्छी तरह से दिखाता है कि मैं क्या हूँ। मेरे पास एक फ़ंक्शन है जो किसी दिए गए प्रकार को वापस करने की उम्मीद है। यह एक अधूरा स्विच के आधार पर करता है। लेकिन जिस स्थिति में default मामला पहुंच गया है, मैं सिर्फ एक त्रुटि उत्पन्न करने की उम्मीद कर रहा था। एक 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
    }
}
5
Travis Griggs 4 पद 2015, 22:57

3 जवाब

सबसे बढ़िया उत्तर

यदि आप चाहते हैं कि डिफ़ॉल्ट मामले में समाप्त करें कार्यक्रम (क्योंकि डिफ़ॉल्ट मामला इंगित करेगा प्रोग्रामिंग त्रुटि ), 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 (सम्मान के साथ) चिह्नित किया गया है रिटर्न टाइप Never स्विफ्ट 3 में), इसलिए कंपाइलर गुम मामलों या गुमशुदगी की शिकायत नहीं करेगा मान लौटाएं।

assert() या assertionFailure() जैसे समान फ़ंक्शन के विपरीत, fatalError() कभी भी "अनुकूलित दूर नहीं" होता है, इसका मूल्यांकन डिबग, अनुकूलित और अनियंत्रित बिल्ड में किया जाता है।

12
Martin R 23 अक्टूबर 2016, 20:12
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")
}

}

इस तरह मैं त्रुटि को लागू करूंगा।

1
Shane11 4 पद 2015, 20:02
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
1
user3441734 4 पद 2015, 20:10