以下をObjective-CからSwiftに変換するにはどうすればよいですか?
if (myVar) return;
Swiftは条件を囲む括弧を使用しませんが、次のコードはエラーを返します。
if myVar return
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
まあ他の人も説明したように、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")
}
1行if
、1行while
および1行for
は、読みにくく、多くのエラーの原因であると言われているため、多くの開発者にとって悪いスタイルと見なされています。
Swiftは、1行のフロー制御ステートメントを禁止することで難問を解決しました。中括弧はオプションではありません...
if someCondition {
// stuff
}
もちろん、まだできます
if someCondition { return }
実装の理由もあります。オプションとして条件を括弧で囲むと、解析がはるかに難しくなります。中括弧を強制すると、構文解析が簡単になります。
Swift 3の場合、失敗した場合にデフォルト値を設定するだけでよいため、新しいNil-Coalescing演算子を使用できます。
let someValue = someOptional ?? ""
SomeOptionalがfalse
の場合、この演算子はsomeValueに ""を割り当てます
var dataDesc = (value == 7) ? "equal to 7" : "not equal to 7"
これが私のプロジェクトで使用した簡単なソリューションです。
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"