> You can delete the default case here, and your switch will still be exhaustive That's exactly my problem! It is *not*.
When I delete the default clause, the compiler warns that the switch is not exhaustive and fixits suggest to add the "missing" deprecated cases. - Dennis > On Nov 5, 2017, at 4:36 PM, Charles Srstka <cocoa...@charlessoft.com> wrote: > >> On Nov 5, 2017, at 9:27 AM, Dennis Weissmann <den...@dennisweissmann.me >> <mailto:den...@dennisweissmann.me>> wrote: >> >> Hi Charles, >> >> I do believe you :) >> >> The problem is that this doesn't work without a compiler warning if you >> switch over every case except for the deprecated ones because then the >> compiler warns that "default will never be executed". >> >> As per my first mail feel free to try this out in a playground: >> >> private func handleLocalAuthenticationError(_ error: LAError) { >> switch error.code { >> case .userCancel, .appCancel, .systemCancel: >> // Handle cancelation >> case .authenticationFailed: >> // Handle failure >> case .passcodeNotSet: >> // Handle passcode absence >> case .biometryNotEnrolled: >> // Handle no biometry enrollment >> case .biometryNotAvailable: >> // Handle no biometry availabe >> case .biometryLockout: >> // Handle biometry Lockout >> case .userFallback: >> // Handle user fallback >> case .invalidContext: >> // Handle failure with invalid context >> case .notInteractive: >> // Handle no interaction allowed error >> default: // <- Here the compiler >> emits a warning that the default will never be executed. >> // hopefully only deprecated cases >> break >> } >> } >> >> - Dennis > > Hi Dennis, > > The compiler warning is correct. That default *will* never be executed, > because if one of the .touchID cases comes up, control flow will go to the > .biometry cases. > > Although it’s bridged to Swift, LAError is a C enum, which is just an > integer. So if the framework set it to .biometryNotAvailable, it’s -6. If the > framework code spelled it .touchIDNotAvailable, it’s still -6. And C has no > way to distinguish between the two; -6 is -6. So your .biometryNotAvailable > case will catch it either way. You can delete the default case here, and your > switch will still be exhaustive (unless Apple adds additional cases to the > enum in the future, of course). > > Charles
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users