Swift中的单行if语句

时间:2014-06-11 08:58:27

标签: ios objective-c swift swift3 swift4

如何从Objective-C将以下内容转换为Swift?

if (myVar) return;

Swift不会在条件周围使用括号,但是下面的代码会出错。

if myVar return 

8 个答案:

答案 0 :(得分:54)

其他人也解释说,牙套是必须的。但为了简单起见,我们总能做到这样的事情:

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 :(得分:41)

在Swift中,大括号不像Objective-C(C)那样是可选的。另一方面,parens是可选的。例子:

有效的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

答案 2 :(得分:13)

许多开发人员将单行if,单行while和单行for视为不良风格,因为它们的可读性较低,据称是许多错误的来源。

Swift通过禁止单行流控制语句解决了这个难题;大括号是非选择性的......

if someCondition {
     // stuff
}

当然,你仍然可以

if someCondition { return }

还有实施原因。将条件括起来作为可选项使得解析更加困难。强制使用大括号可以简化解析。

答案 3 :(得分:10)

你可以使用新的Nil-Coalescing Operator,因为如果你需要在if if失败的情况下只需设置默认值,就可以使用Swift 3:

let someValue = someOptional ?? ""

如果someOptional为false,则此运算符分配"" to someValue

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

答案 4 :(得分:6)

这是我在项目中使用的简单解决方案。

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"

答案 5 :(得分:0)

Swift 3 +

的一线解决方案
isMyVar ? someAction() : ()

答案 6 :(得分:0)

Swift 5 Easy One Line解决方案

var isSeller = (UserDefaults.standard.value(forKey: "isRole") as? String == "ROLE_SELLER") ? true : false

答案 7 :(得分:0)

Swift 5简易解决方案

let exercise = (segcExercise.selectedSegmentIndex == 0) ? "GymLover" : (segcExercise.selectedSegmentIndex == 1) ? "Occasionally" : "No Way"

//MARK:- outPut   // Occasionally

enter image description here