2017-04-17 3 views
1

Je dois renvoyer une chaîne d'un setter, Comment puis-je faire cela? Voici le code:Valeur de retour rapide dans setter

func example()->String{ 
    var _a = 5 
    var a: Int{ 
     set(newValue){ 
      _a = newValue 
      if _a < 0{ 
       //return a string here!! 
      } 
     }get{ 
      return _a 
     } 
    } 
    a = 0 
} 
+0

setter Valeurs de réglage uniquement sans retour. Mais vous pouvez utiliser variable dans votre méthode 'example' –

+0

Logiquement parlant, vous ne pouvez pas * renvoyer * une valeur dans * setter * ... –

+1

pourquoi vous voulez renvoyer une valeur de set? à quoi ça sert? – Sahil

Répondre

0

Non, vous ne pouvez pas le faire, malheureusement, mais ce sera assez déroutant si vous pouvez faire de toute façon. Nous savons tous que les fermetures sont des citoyens de première classe à Swift et que les fermetures peuvent être imbriquées. Ce que vous faites ici est de mettre une fermeture à l'intérieur d'une autre fermeture et d'essayer de renvoyer une valeur de la fermeture intérieure. Cependant, même si les fermetures peuvent être imbriquées, deux fermetures différentes sont deux fermetures différentes. Considérez les fermetures imbriquées comme des fermetures non imbriquées. Bien sûr, vous pouvez utiliser des valeurs de la fermeture extérieure dans la fermeture intérieure:

func a(x: Int) { 
    func b() { 
     // use x here 
    } 
} 

Mais c'est quelque chose que vous pouvez faire avec 2 fermetures non imbriquées ainsi. Ce que vous essayez de faire est de faire le retour de fermeture externe en retournant une valeur de la fermeture intérieure:

func a() -> String { 
    func b() { 
     return "" 
    } 

    b() 
} 

Ceci est tout simplement pas possible avec 2 fermetures non imbriquées:

func a() -> String { 
    b() 
} 

func b() { 
    return "" 
} 

Et de toute façon , il sera très difficile de comprendre votre code si vous vraiment pourrait le faire. En tant que lecteur de votre code, les gens s'attendraient à une déclaration de retour qui indique quelle valeur retourner exactement. Ils n'attendent pas un

a = 0 

qui retourne des choses. Ils devraient regarder dans le setter de a afin de savoir quelle valeur la fermeture reviendra. C'est beaucoup de regarder dans le code, ce qui est très gênant.