44

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

if (myVar) return;

Swift 没有在条件周围使用括号,但是下面的代码给出了一个错误。

if myVar return 
4

8 回答 8

65

好吧,其他人也解释说,大括号是 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")
}
于 2014-12-23T12:12:02.940 回答
45

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

有效的斯威夫特:

if someCondition {
    // stuff
}

if (someCondition) {
    // stuff
}

无效的斯威夫特:

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
于 2014-06-11T09:01:51.370 回答
28

您可以使用新的 Nil-Coalescing 运算符,因为 Swift 3 以防万一您需要在 if 失败的情况下设置默认值:

let someValue = someOptional ?? ""

如果 someOptional 是false,则此运算符将 "" 分配给 someValue

var dataDesc = (value == 7) ? "equal to 7" : "not equal to 7"
于 2017-05-26T01:29:38.443 回答
15

单行if、单行while和单行for被许多开发人员认为是一种糟糕的样式,因为它们的可读性较差,并且据称是许多错误的来源。

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

if someCondition {
     // stuff
}

当然,你仍然可以这样做

if someCondition { return }

还有实施原因。将条件周围的括号作为可选会使解析变得更加困难。强制大括号再次简化了解析。

于 2014-06-11T09:03:53.157 回答
12

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

斯威夫特 4+

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

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

斯威夫特 3+

var retunString = (state == "OFF") ? "securityOn" : "securityOff"
于 2017-09-26T03:23:47.920 回答
0

Swift 5 Easy 一条线解决方案

var isSeller = (UserDefaults.standard.value(forKey: "isRole") as? String == "ROLE_SELLER") ? true : false
于 2020-12-01T04:56:22.363 回答
0

Swift 5 简易解决方案

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

//MARK:- outPut   // Occasionally

在此处输入图像描述

于 2020-12-17T17:08:02.157 回答
0

Swift 3+的一条线解决方案

isMyVar ? someAction() : ()
于 2020-10-28T15:20:52.893 回答