web-dev-qa-db-ja.com

Swiftのifステートメント

以下をObjective-CからSwiftに変換するにはどうすればよいですか?

if (myVar) return;

Swiftは条件を囲む括弧を使用しませんが、次のコードはエラーを返します。

if myVar return 
35
BytesGuy

In Swift Objective-C(C)のように中括弧はオプションではありません。一方、括弧はオプションです。例:

有効なSwift:

if someCondition {
    // stuff
}

if (someCondition) {
    // stuff
}

無効なSwift:

if someCondition 
    // one liner

if (someCondition)
    // one liner

この設計上の決定により、次のケースのように中括弧なしのifステートメントを不適切に使用することに起因するバグのクラス全体が排除されます。この場合、somethingの値は条件付きで変更されるが、somethingElse値は毎回変わります。

Bool something = true
Bool somethingElse = true

if (anUnrelatedCondition) 
    something = false
    somethingElse = false

print something // outputs true
print somethingElse // outputs false
41
Mick MacCallum

まあ他の人も説明したように、Swiftではブレースは必須です。しかし、簡単にするために、次のようなことが常にできます。

let a = -5

// if the condition is true then doThis() gets called else doThat() gets called
a >= 0 ? doThis(): doThat()

func doThis() {
    println("Do This")
}

func doThat() {
    println("Do That")
}
54
4aRk Kn1gh7

1行if、1行whileおよび1行forは、読みにくく、多くのエラーの原因であると言われているため、多くの開発者にとって悪いスタイルと見なされています。

Swiftは、1行のフロー制御ステートメントを禁止することで難問を解決しました。中括弧はオプションではありません...

if someCondition {
     // stuff
}

もちろん、まだできます

if someCondition { return }

実装の理由もあります。オプションとして条件を括弧で囲むと、解析がはるかに難しくなります。中括弧を強制すると、構文解析が簡単になります。

13
Sulthan

Swift 3の場合、失敗した場合にデフォルト値を設定するだけでよいため、新しいNil-Coalescing演算子を使用できます。

let someValue = someOptional ?? ""

SomeOptionalがfalseの場合、この演算子はsomeValueに ""を割り当てます

var dataDesc = (value == 7) ? "equal to 7" : "not equal to 7"
12
Azhar

これが私のプロジェクトで使用した簡単なソリューションです。

Swift 4 +

isManageCardTnCSelected ?
      (checkbox.isSelected = true) : (checkbox.isSelected = false)

var selected: Bool = isManageCardTnCSelected ?
      checkbox.isSelected = true : checkbox.isSelected = false

Swift 3 +

var retunString = (state == "OFF") ? "securityOn" : "securityOff"
9
Sathya Baman