2017-07-12 5 views
-1

これは非常にばかな質問かもしれませんが、私に負担してください: 私の理解と、他のウェブサイトのドキュメントとさまざまな例を読んだ後、guardステートメントはブールをチェックします。それが本当であれば、現在のスコープは実行され続けます。そうでない場合は、それがelse句が実行されます。ここで1は、現在のスコープを終了しreturnステートメントを使用する必要があります。しかし、これは私のためには機能しません。基本的にはガードが関数を終了しない

なぜreturnは、この関数の外に出ていないのですか?

class Person { 

    var name: String 

    init (name: String) { 
     self.name = name 
    } 

    func reverseNameUnlessItsHans() { 
     guard name == "Hans" else { //should exit the scope... 
      print("It's Hans") 
      return 
     } 
     self.name = String(name.characters.reversed()) //...yet this is executed 
    } 
} 

var myPerson = Person(name: "Hans") 
myPerson.reverseNameUnlessItsHans() 
print(myPerson.name) //prints "snaH" 
+2

を交換する必要がありますtrueの場合、現在のスコープが*」。実行に続けて、それが正しいです。 '名==「ハンス」' * *真であるので、実行は継続され、他の節が実行されません。あなたがそれを記述したのとまったく同じです。 –

+2

guard' 'の意味が混乱している場合、あなたは「確実」や「主張」かであなたの心の中でそれを置き換えることができます「ということを確認してください。」それはあなたがそれを読むべきです。このスコープを継続するには、これが真でなければなりません。 –

+0

Robが言ったことを続けている: "しかし、もしそれが期待されたものでないなら、* else *のステートメントに従って出口のスコープを変えてください" print( "It's Hans")** to ** 'print("それはハンスではありません ")' – Honey

答えて

7

あなたはあなたの逆を変更==「ハンス」

名はガードの内側になるようにケースに対する保護されており、それはだ場合、印刷は "*あなたが言っ逆に

関連する問題