Reputation: 55
I am creating a function where in validates a passcode, I tried to debug it and look for possible solution, but seems I can't look for a better solution for it.
func validateEventPasscode(){
//Show Loading
self.view.squareLoading.start(0.0)
let api = APIService ()
api.validatePasscode(eventcode: eventCode) { (data, error) in
guard let eventDetails = self.event, error == nil else {
if let networkError = Error.self {
if networkError == .InvalidCredentials {
_ = SCLAlertView(appearance: appearance).showError("Ooops!", subTitle: "Please enter a valid event passcode")
}else {
_ = SCLAlertView(appearance: appearance).showError("Network Error", subTitle: "\(networkError.rawValue)")
}
}
self.view.squareLoading.stop(0.0)
return
}
guard eventDetails.deleteFlag == false else {
_ = SCLAlertView(appearance: appearance).showError("Ooops!", subTitle: "Please enter a valid event passcode")
self.view.squareLoading.stop(0.0)
return
}
if (eventDetails.closedFlag == true && eventDetails.reopenFlag == false) {
_ = SCLAlertView(appearance: appearance).showError("Closed Event", subTitle: "Please check the status of your event and try again")
self.view.squareLoading.stop(0.0)
return
}
Where .InvalidCredentials came from
enum NetworkError: Error {
case InvalidCredentials
case custom(String)
case other
}
extension NetworkError: LocalizedError {
var errorDescription: String? {
switch self {
case .InvalidCredentials:
return "Invalid event code"
case .other:
return "Something went wrong"
case .custom:(let message):
return message
}
}
}
I used this link as my reference, for APIService I used in validatePasscode validatePasscode reference
Upvotes: 0
Views: 406
Reputation: 6662
It seems like you're trying to cast your error
to an object of the Error
type, which can be done like this
if let networkError = error as? Error {
if networkError == .InvalidCredentials {
_ = SCLAlertView(appearance: appearance).showError("Ooops!", subTitle: "Please enter a valid event passcode")
}else {
_ = SCLAlertView(appearance: appearance).showError("Network Error", subTitle: "\(networkError.rawValue)")
}
}
Edit - Here's your code fixed
enum NetworkError: Error {
case invalidCredentials
case custom(String)
case other
}
extension NetworkError: LocalizedError {
var errorDescription: String? {
switch self {
case .invalidCredentials:
return "Invalid event code"
case .other:
return "Something went wrong"
case .custom(let message):
return message
}
}
}
func validateEventPasscode() {
//Show Loading
self.view.squareLoading.start(0.0)
let api = APIService()
api.validatePasscode(eventcode: eventCode) { (data, error) in
guard let eventDetails = self.event, error == nil else {
guard let error = error as? NetworkError else { return }
switch error {
case .invalidCredentials:
_ = SCLAlertView(appearance: appearance).showError("Ooops!", subTitle: "Please enter a valid event passcode")
case .custom(let message):
print(message)
case .other:
_ = SCLAlertView(appearance: appearance).showError("Network Error", subTitle: "\(networkError.rawValue)")
}
self.view.squareLoading.stop(0.0)
return
}
guard !eventDetails.deleteFlag else {
_ = SCLAlertView(appearance: appearance).showError("Ooops!", subTitle: "Please enter a valid event passcode")
self.view.squareLoading.stop(0.0)
return
}
if eventDetails.closedFlag, !eventDetails.reopenFlag {
_ = SCLAlertView(appearance: appearance).showError("Closed Event", subTitle: "Please check the status of your event and try again")
self.view.squareLoading.stop(0.0)
return
}
}
}
Upvotes: 1
Reputation: 285220
You have to optional bind the optional error
parameter, not the non-optional Error
type.
I recommend this syntax (eventDetails
seems to be unused)
func validateEventPasscode(){
//Show Loading
self.view.squareLoading.start(0.0)
let api = APIService ()
api.validatePasscode(eventcode: eventCode) { (data, error) in
if let networkError = error {
if networkError == .InvalidCredentials {
_ = SCLAlertView(appearance: appearance).showError("Ooops!", subTitle: "Please enter a valid event passcode")
} else {
_ = SCLAlertView(appearance: appearance).showError("Network Error", subTitle: "\(networkError.rawValue)")
}
} else {
self.view.squareLoading.stop(0.0)
}
}
}
Upvotes: 0