[解決済み] Swiftのif letと論理AND演算子&&の使い分け
質問
私たちは
if let
ステートメントを省略記法として使用し、オプションのnilをチェックし、アンラップすることができます。
しかし、私はそれを論理AND演算子を使った別の式と組み合わせたいのです。
&&
.
例えば、ここではrootViewControllerからtabBarControllerへのunwrapとdowncastをオプションでチェーニングしています。しかし、ネストされたif文ではなく、それらを組み合わせたいと思います。
if let tabBarController = window!.rootViewController as? UITabBarController {
if tabBarController.viewControllers.count > 0 {
println("do stuff")
}
}
合わせて寄付する。
if let tabBarController = window!.rootViewController as? UITabBarController &&
tabBarController.viewControllers.count > 0 {
println("do stuff")
}
}
上記の場合、コンパイルエラーが発生します。 未解決の識別子 'tabBarController' を使用しています。
簡略化します。
if let tabBarController = window!.rootViewController as? UITabBarController && true {
println("do stuff")
}
これはコンパイルエラーになります 条件付きバインディングのバウンド値はOptional型でなければなりません。 . 様々な構文のバリエーションを試しましたが、それぞれ異なるコンパイラーエラーが発生します。順序と括弧の必勝の組み合わせはまだ見つかっていません。
そこで質問ですが、それは可能ですか、もし可能なら、正しい構文は何ですか。
私はこれを
if
ステートメント
ではなく
a
switch
ステートメントや三項
?
演算子を使用します。
どのように解決するのですか?
Swift 1.2 の時点で、この が可能になりました。 . その Swift 1.2 と Xcode 6.3 のベータ版リリースノート の状態になります。
でより強力なオプショナル・アンラップ if let - if let 構造体 は複数のオプショナルを一度にアンラップできるようになり、また、間にブール条件を含むことができるようになりました。 を含むことができるようになりました。これにより、不要な入れ子をすることなく、条件付き 不必要な入れ子なしで制御フローを表現できます。
上記の記述で、構文は次のようになります。
if let tabBarController = window!.rootViewController as? UITabBarController where tabBarController.viewControllers.count > 0 {
println("do stuff")
}
これは
where
節を使用しています。
別の例では、今度は
AnyObject
を
Int
に変更し、オプショナルをアンラップし、アンラップされたオプショナルが条件を満たしているかどうかをチェックします。
if let w = width as? Int where w < 500
{
println("success!")
}
現在Swift 3を使用している人のために、"where"はカンマに置き換えられました。したがって、同等のものは次のようになります。
if let w = width as? Int, w < 500
{
println("success!")
}
関連
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] 使用しているSwiftのバージョンを確認するにはどうすればよいですか?
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] Swiftベースのアプリケーションは、OS X 10.9/iOS 7以下でも動作しますか?
-
[解決済み] Swiftでdispatch_onceのシングルトンモデルを使う
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み】Swiftの`let`と`var`の違いは何ですか?
-
[解決済み] ""内の二重引用符を印刷するには?
-
[解決済み] Swiftの変数に"?"(クエスチョンマーク)と"!"(エクスクラメーションマーク)の装飾を施す。
-
[解決済み] NSFetchRequestのインスタンスに型を適用する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Swift Error fatal error: Optional value のアンラップ中に予期せず nil を発見した。
-
Swift の Optional 値 && Optional のアンラップ時に予期せず nil が検出された場合の説明
-
[解決済み] Protocol ... can only be used as generic constraint because it has Self or associated type requirements "とは、どういう意味ですか?
-
[解決済み] Swift 3で現在の日付を取得する?[クローズド]
-
[解決済み] Swiftのリバースレンジ
-
[解決済み] Swiftで複数のカスタムセルを持つUITableview
-
[解決済み] 非'@objc'メソッドは'@objc'プロトコルのオプション要件を満たしていない
-
[解決済み] swiftにおける "precondition "と "assert "の違いとは?
-
[解決済み] SwiftUIで条件付きでビューを使用する
-
[解決済み] Swift- Remove Push Notification Badge number?