Swiftのguardは非常に便利で賢い仕組みですが、その性質上 Rubyの unless などと混同されてしまい、可読性が下がると誤解されがちです。
おそらく、guardを難しく感じている人はこのような読み方をしていると思います。

たしかにこれでは条件式を読解した上で、elseでその条件が否定するため難しく感じるでしょう。例えば、
guard !userClient.isLoggedIn else { // ログイン済み時の処理 return } // 未ログイン時の処理
といったコードの場合、isLoggedInの !isLoggedIn の else と読んでしまうため、「ログインして"いない"、"ではない"」みたいに否定の否定でややこしく感じます。
ここで一旦if-else構文のことを考えてみましょう。if-elseを読む時に、このような読み方はしないと思います。

シンプルに上から読んでいって、次の画像の流れになると思います。

これと同じ形で guard も読めば良いです。

これなら否定の否定は発生せず、素直に条件文を読むことができますね。
guard の性質上、すぐにelse時の処理が書かれているためそこを読んでしまいがちですが、guard という文法は「早期リターンである」ことを明示した構文です。これはdo-catch のcatch側と類似しているため、ブロック内には主に例外処理が含まれています。その前提があれば、guardを読む際には、中身を飛ばして(条件の否定をせず)読めば良くなるため、否定の否定をする必要はなく複雑さが減ると思います。
なお、本記事では簡単のために「これならifの方が良くない?」というコードサンプルになってしまっていますが、実際のコードではOptional Bindingや値チェックなどが入ってくると思います。