如何将以下内容从 Objective-C 转换为 Swift?
if (myVar) return;
Swift 没有在条件周围使用括号,但是下面的代码给出了一个错误。
if myVar return
如何将以下内容从 Objective-C 转换为 Swift?
if (myVar) return;
Swift 没有在条件周围使用括号,但是下面的代码给出了一个错误。
if myVar return
好吧,其他人也解释说,大括号是 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")
}
在 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
您可以使用新的 Nil-Coalescing 运算符,因为 Swift 3 以防万一您需要在 if 失败的情况下设置默认值:
let someValue = someOptional ?? ""
如果 someOptional 是false
,则此运算符将 "" 分配给 someValue
var dataDesc = (value == 7) ? "equal to 7" : "not equal to 7"
单行if
、单行while
和单行for
被许多开发人员认为是一种糟糕的样式,因为它们的可读性较差,并且据称是许多错误的来源。
Swift 通过禁止单行流控制语句解决了这个难题;大括号是非可选的...
if someCondition {
// stuff
}
当然,你仍然可以这样做
if someCondition { return }
还有实施原因。将条件周围的括号作为可选会使解析变得更加困难。强制大括号再次简化了解析。
这是我在项目中使用的一个简单解决方案。
斯威夫特 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"
Swift 5 Easy 一条线解决方案
var isSeller = (UserDefaults.standard.value(forKey: "isRole") as? String == "ROLE_SELLER") ? true : false
Swift 3+的一条线解决方案
isMyVar ? someAction() : ()