Idiomatic way of catching multiple exceptions from Java in Swift

Ouverte
#545 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
25/100
Type d'issue
Fonctionnalité
Clarté
À clarifier
Activité
À l'abandon
Stack technique
java, swift

Piste de recherche

Commencez par l’exemple de catch de File.swift et les wrappers FirstException et SecondException générés présentés dans l’issue. Reproduisez le comportement du catch générique à l’aide de la méthode Java qui peut lever les deux exceptions, puis examinez le comportement du bridging des exceptions entre Swift et Java. C’est terminé lorsque la gestion idiomatique prise en charge est établie et documentée, ou implémentée avec un exemple reproductible.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Description

Hi everyone!

When I worked on integrating local Java library to my Swift package, I haven't found any mention about how to handle exceptions thrown by Java code in my Swift code.

I mean I still can use something like:

// File.swift

let myJavaClass = try JavaClass<MyJavaClass>(environment: jniEnvironment)

do {
   try myJavaClass.throwException()
} catch {
    print(error)
}

And I might have wrapped error in a string, and compare the results, but this is not what I really wanted to do...

The throwException() can throw multiple different exceptions, which are: FirstCustomException, SecondCustomException.
Their implementation in Java very simple:

// Java file

public class FirstException extends Exception {
    public FirstException(String message) {
        super(message);
    }
}

public class SecondException extends Exception {
    public SecondException(String message) {
        super(message);
    }
}

Since I added both to my swift-java config file, I can see them built by Swift-Java:

// Auto-generated by Java-to-Swift wrapper generator.
import CSwiftJavaJNI
import SwiftJava

@JavaClass("org.FirstException")
open class FirstException: Exception {
  @JavaMethod
  @_nonoverride public convenience init(_ arg0: String, environment: JNIEnvironment? = nil)
}

// And the same for another exception as well...

So, my naive approach was to use catch let syntax:

do {
   try myJavaClass.throwException()
} catch let error as FirstException {
  // do something with error
} catch let error as SecondException {
  // do something with error
}

And, it's built successfully, but neither of catch let blocks are triggered.
If I added generic catch block, it is the one that will be executed.

Question

So, my question is, what is the idiomatic way of handling errors in the scenarios similar to one I described.

Thank you in advance 🙂

Langage dominant
Swift
Étoiles
1.3k
Forks
127
Merge moyen
1 h 6 min
PR mergées (30 j)
3

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de swiftlang/swift-java

Toutes les issues de swiftlang/swift-java

Issues similaires

Plus d'issues Swift

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.