J'ai le code pour exécuter un NSFetchRequest
et couler son résultat à un tableau de mon type de model de données personnalisé. Aller chercher peut jeter mais je ne veux pas me soucier de l'erreur, donc try?
, et j'utilise aussi as?
en casting. Dans Swift 2, c'était très bien, mais Swift 3 produit un double optionnel:
var expenses: [Expense]? { let request = NSFetchRequest<NSFetchRequestResult>(entityName: Expense.entityName) request.predicate = NSPredicate(format: "dateSpent >= %@ AND dateSpent <= %@", [self.startDate, self.endDate]) // Returns [Expense]? because right side is [Expense]?? if let expenses = try? App.mainQueueContext.fetch(request) as? [Expense], expenses?.isEmpty == false { return expenses } return nil }
Comment est-ce que je peux reformuler le côté droit de ma binding optionnelle dans if let
que son type sera simplement un tableau [Expense]
? Je pense qu'il semble absurde que dans la condition booleanne suivante (qui était une clause where
), le tableau soit toujours optionnel.
Vous devez envelopper votre try?
appeler entre parenthèses comme ceci:
if let expenses = (try? App.mainQueueContext.fetch(request)) as? [Expense]
C'est parce as?
a une priorité plus élevée que d' try?
(probablement parce que try?
peut être appliqué à l'expression entière).
@ La réponse de Fantattitude donne ce que vous voulez. Mais il me faut un certain time pour parcourir le document afin de savoir pourquoi . Trop longtime pour être un commentaire, alors voici la reference:
Selon le chapitre sur les expressions de Swift Programming Language (Swift 3)
Lorsque l'expression du côté gauche d'un opérateur binary est marquée avec try, essayez ?, ou essayez !, cet opérateur s'applique à toute l' expression binary.
Tout d'abord, je pensais as
n'est peut- être pas un opérateur binary, mais dans les opérateurs de bibliothèque Swift Standard
as
,as?
etas!
sont les opérateurs opérateurs Infix
et dans le chapitre Déclaration de l'opérateur
Un opérateur infixe est un opérateur binary écrit entre ses deux opérandes, tel que l'opérateur d'addition familier (+) dans l'expression 1 + 2.