如何从Objective-C将以下内容转换为Swift?
if (myVar) return;
Swift不会在条件周围使用括号,但是下面的代码会出错。
if myVar return
答案 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)